我(很简单,我想)需要有这样一种情况:有很多配置文件,并且有很多合奏,并且每个配置文件必须能够成为一个或多个合奏的一部分。这是我的代码:
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管理中,我可以从“合奏”页面中选择其成员。我还可以从“个人资料”页面中选择一个与该个人资料所属的集合相似的页面。问题是:它们没有同步:如果我通过“个人资料”页面将个人资料添加到整体,则这并没有反映在“整体”页面中,反之亦然,即在“个人资料详细信息”页面中我不这样做。不能从“合奏”页面中看到我之前分配该配置文件的合奏。
您不应该在ForeignKey
到Profile
之间添加多余的Ensemble
。 ManyToManyField
沿both]方向工作(就像Django中的其他任何关系一样)。 related_name=…
[Django-doc]是reverse中的版本名称。所以这里应该是related_name=…
:
:通常,Django模型中字段的名称用snake_case而不是PerlCase编写,因此应为:ensembles
Note
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
] >。