可以通过设置through参数来进行many-to-many的反向注释。 例如,我们有以下模型:
class Person(models.Model):
name = models.CharField(max_length=50)
class Group(models.Model):
name = models.CharField(max_length=50)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
date_joined = models.DateField()
那么我们可以通过以下方式在Person模型中添加反向注释:
class Person(models.Model):
name = models.CharField(max_length=50)
groups = models.ManyToManyField(
Group,
through='Membership',
related_name='members'
)
这里的related_name='members'意味着Group中有一个名为members的反向关系。
然后可以像这样访问组成员:
group = Group.objects.get(name='Developers')
members = group.members.all()
也可以通过使用related_name参数来在many-to-many反向注释中设置名称。 例如,在Person和Group模型中有以下设置:
class Person(models.Model):
name = models.CharField(max_length=50)
group = models.ManyToManyField(Group, related_name='members')
class Group(models.Model):
name = models.CharField(max_length=50)
可以在Group模型中使用members.all()来访问成员:
group = Group.objects.get(name='Developers')
members = group.members.all()