我不确定您是否可以通过常规ManytoManyField
来实现此目标。你可以尝试明确定义中间模型。
nb:未经测试的代码!
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
对象爱丽丝是跟随者,通过连接表的id订购的queryset的,用线:
>>> qs = FollowerRelationship.objects.filter(follower=a).order_by('id')
>>> [fr.following for fr in qs]
请注意,您通过FollowerRelationship
必须循环对象,以获得关系中的'follow'Person
。
您可能还想看看Django文档中的Extra fields on many-to-many relationships,该文档介绍了如何以多对多关系指定中间模型。
有趣/奇怪的问题。 ManyToMany用于执行连接的中间表的id字段很有趣,因为...? – 2009-12-15 03:58:38
请张贴一些代码。 – czarchaic 2009-12-15 06:36:53
@peter我认为该表中的id应显示所建立关系的顺序,以便他可以完成他的“你最近遵循的:”主意。 – 2009-12-15 18:45:05