我有一个具有自指的Manytomanyfield的模型:
class Release(models.Model):
# ...
bundled_releases = models.ManyToManyField("self", blank=True)
def get_bundles(self):
return Release.objects.filter(bundled_releases__in=[self.id])
我希望
get_bundles
仅返回在其字段中具有self
的版本,但是这样它也可以返回在bundled_releases
的字段中的发行版。我该怎么做?
Edit:,反之亦然,我需要返回发行版
self
的替代方案,但不返回将发行版本包含在其自己的bundled_releases
中的版本。
您的关系是对称的,这就是问题所在。默认情况下,与自身的关系具有
release.bundled_releases.all
[django-doc]bundled_releases
与bundled_releases
。 因此,您与之合作:
symmetrical=True
但是,需要做出my_a.bundled_releases.all()
方法。 Django使关系可以在两个方向上访问。在这里,您可以反向触发该关系:my_a.release_set.all()
由于class Release(models.Model):
# …
bundled_releases = models.ManyToManyField(
'self', symmetrical=False, related_name='bundles', blank=True
)
。