Django的多对多关系中的类必须在同一个models.py文件中吗?
Must the classes in Django's many-to-many relationship be in the same models.py file?
请帮助我更好地理解 ManytoManyField
在 Django 中的工作原理。可能我看到的例子对于初学者来说比较简单,但是在所有的例子中,ManytoManyFields
中涉及的类似乎都在同一个models.py
文件中。在我的练习中(在 tutorial 之后,我将两个 类 放在两个不同的 models.py
文件(不同的应用程序)中,并且正在努力让它们连接。所以我的问题 #1:做Django 的多对多关系中的 类 必须在同一个 models.py
文件中吗?#2 对于真正的多对多关系,我是否需要创建一个“通过”table/relationship?
以下是教程中的相关代码片段:
#app='household'
class Member(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
# household = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
photo = models.ImageField(
upload_to='uploads/members/', default='/icons/member.svg')
def __str__(self):
return '%s Household | %s' % (self.user, self.name)
#app=meals
class Meal(models.Model):
name = models.CharField(max_length=255)
date = models.DateField()
members = models.ManyToManyField('Member')
#1: Do the classes in Django's many-to-many relationship have to be in the same models.py file?
否。例如,如果另一个模型是 app2
中的 Foo
,您可以将其写为:
class Meal(models.Model):
foos = models.ManyToManyField('<b>app2.</b>Foo')
#2 For a true many-to-many relationship, do I need to create a "through" table/relationship?
否。如果您自己没有指定 through=…
,Django 将为 ManyToManyField
创建一个隐藏模型。该模型将有两个 ForeignKey
:一个到“源”模型,一个到“目标”模型。
如果您想在多对多关系中添加额外的数据,您可以定义一个自定义 through=…
模型来在两个 ForeignKey
之外添加额外的数据。
请帮助我更好地理解 ManytoManyField
在 Django 中的工作原理。可能我看到的例子对于初学者来说比较简单,但是在所有的例子中,ManytoManyFields
中涉及的类似乎都在同一个models.py
文件中。在我的练习中(在 tutorial 之后,我将两个 类 放在两个不同的 models.py
文件(不同的应用程序)中,并且正在努力让它们连接。所以我的问题 #1:做Django 的多对多关系中的 类 必须在同一个 models.py
文件中吗?#2 对于真正的多对多关系,我是否需要创建一个“通过”table/relationship?
以下是教程中的相关代码片段:
#app='household'
class Member(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
# household = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
photo = models.ImageField(
upload_to='uploads/members/', default='/icons/member.svg')
def __str__(self):
return '%s Household | %s' % (self.user, self.name)
#app=meals
class Meal(models.Model):
name = models.CharField(max_length=255)
date = models.DateField()
members = models.ManyToManyField('Member')
#1: Do the classes in Django's many-to-many relationship have to be in the same models.py file?
否。例如,如果另一个模型是 app2
中的 Foo
,您可以将其写为:
class Meal(models.Model):
foos = models.ManyToManyField('<b>app2.</b>Foo')
#2 For a true many-to-many relationship, do I need to create a "through" table/relationship?
否。如果您自己没有指定 through=…
,Django 将为 ManyToManyField
创建一个隐藏模型。该模型将有两个 ForeignKey
:一个到“源”模型,一个到“目标”模型。
如果您想在多对多关系中添加额外的数据,您可以定义一个自定义 through=…
模型来在两个 ForeignKey
之外添加额外的数据。