我不确定您是否可以通过常规ManytoManyField
. 您可以尝试显式定义中间模型。
注意:未经测试的代码!
class Person(models.Model)
name = models.CharField(max_length=30)
class FollowerRelationship(models.Model)
follower = models.ForeignKey(Person, related_name = following_set)
following = models.ForeignKey(Person, related_name = follower_set)
然后,您可以在 shell 中创建以下关系,如下所示。
# Create Person objects
>>> a = Person(name="Alice")
>>> a.save()
>>> b = Person(name="Bob")
>>> b.save()
>>> c = Person(name="Chris")
>>> c.save()
# Let Alice follow Chris and Bob
>>> FollowerRelationship.objects.create(follower=a, following=c)
>>> FollowerRelationship.objects.create(follower=a, following=b)
您可以创建一个FollowerRelationship
对象的查询集,其中 Alice 是追随者,按连接表的 id 排序,使用以下行:
>>> qs = FollowerRelationship.objects.filter(follower=a).order_by('id')
>>> [fr.following for fr in qs]
请注意,您必须遍历FollowerRelationship
对象,才能Person
在关系中获得“关注”。
您可能还想查看Django 文档中多对多关系的额外字段,该文档描述了如何在多对多关系中指定中间模型。