2023年的答案:取决于您在Django中使用的数据库
本答案将涵盖PostgreSQL,MySQL和SQLite。
PostgreSQL
简单说:是的!PostgreSQL 有一个 ArrayField
,而且很简单。模型的代码如下:
from django.db import models
from django.contrib.postgres.fields import ArrayField
class myDjangoModelClass(models.Model):
myName = models.CharField(max_length=64)
myFriends = ArrayField(models.CharField(max_length=64)
关于Django与PostgreSQL中数组字段的文档在这里。
MySQL
简而言之:是的!MySQL也可以处理列表,而且很简单。模型代码如下:
from django.db import models
from django_mysql.models import ListCharField
class myDjangoModelClass(models.Model):
myName = models.CharField(max_length=64)
myFriends = ListCharField(base_field=CharField(max_length=64))
文档列出了在Django与MySQL中的字段在这里。
SQLite
简而言之:不支持。Django与SQLite不直接支持列表。您可以使用其他答案中的其中一种hack/解决方法,或者使用其他答案中描述的JSON字段,或者按照目前已接受的答案所述使用外键来“正确地”完成它。我认为ManyToMany是这里正确的方法,而不是ForeignKey,因为可能有多个人拥有相同的朋友。模型代码:
from django.db import models
class myDjangoModelClass(models.Model):
myName = models.CharField(max_length=64)
class myFriend(models.model):
friend_name = models.CharField(max_length=64)
myName = models.ManyToManyField(myDjangoModelClass, related_name='myFriends')
关于Django中使用SQLite的ManyToMany字段的文档在这里。