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 之外添加额外的数据。