两个Django模型之间的相互关系

问题描述 投票:0回答:1

我(很简单,我想)需要有这样一种情况:有很多配置文件,并且有很多合奏,并且每个配置文件必须能够成为一个或多个合奏的一部分。这是我的代码:

class Ensemble(models.Model):

    ensembleName = models.CharField(max_length=200)
    members = models.ManyToManyField('Profile', related_name='members')

    def __str__(self):
        return self.ensembleName

class Profile(models.Model):

    ensemble = models.ForeignKey(Ensemble, on_delete=models.CASCADE, blank=True, null=True)
[...]

一切正常,但在一定程度上。在Django管理中,我可以从“合奏”页面中选择其成员。我还可以从“个人资料”页面中选择一个与该个人资料所属的集合相似的页面。问题是:它们没有同步:如果我通过“个人资料”页面将个人资料添加到整体,则这并没有反映在“整体”页面中,反之亦然,即在“个人资料详细信息”页面中我不这样做。不能从“合奏”页面中看到我之前分配该配置文件的合奏。

django django-models foreign-keys manytomanyfield generic-foreign-key
1个回答
0
投票

您不应该在ForeignKeyProfile之间添加多余的EnsembleManyToManyField沿both]方向工作(就像Django中的其他任何关系一样)。 related_name=… [Django-doc]reverse中的版本名称。所以这里应该是related_name=…

ensembles

Note

:通常,Django模型中字段的名称用snake_case而不是PerlCase编写,因此应为:class Ensemble(models.Model): ensemble_name = models.CharField(max_length=200) members = models.ManyToManyField('Profile', related_name='ensembles') def __str__(self): return self.ensemble_name class Profile(models.Model): # …而不是ensemble_name] >。
© www.soinside.com 2019 - 2024. All rights reserved.