我想在django中实现一个基本的社交网络模型,即粉丝和追随者
class CustomUser(User):
followers = models.ManyToManyField('self', related_name='followees',
related_query_name='followee')
以上就是我定义的内容。我认为这就足够了,因为manytomany字段提供了回溯查询。我是否还需要创建一个追随者ManyToMany提交?
并且任何人都可以帮助编写如何获得关注者和关注者数量的函数,以及关注者列表和关注者列表。我是django的新手所以我对多对多领域感到困惑
答案 0 :(得分:2)
不,您不必创建(第二个)跟随ManyToMany字段。已经通过指定related_name='followees'
来处理这个问题。在旁注中,没有必要指定related_query_name
,因为默认情况下其值设置为related_name
的值。
ManyToManyField
返回RelatedManager
,允许您对其进行一些类似于QuerySet的查询。在您的情况下,您对count()
:
custom_user = CustomUser().save()
# add followers etc..
followers_count = custom_user.followers.count()
followees_count = custom_user.followees.count()
Django文档对于ManyToMany关系有some nice examples。
答案 1 :(得分:1)
@olieidel是对的,但这是一个非常重要的事情,你不应该错过你的例子:通常,M2M关系是对称的。这意味着,如果您将用户A设置为用户B的关注者,则查询集还将用户B作为用户A的关注者返回。
您可以通过向字段添加symmetrical=False
选项来避免此类行为:
followers = models.ManyToManyField(
to='self',
related_name='followees',
symmetrical=False
)