如何在 Django 中实现追随者/追随者

Posted

技术标签:

【中文标题】如何在 Django 中实现追随者/追随者【英文标题】:How to implement followers/following in Django 【发布时间】:2011-09-07 06:31:40 【问题描述】:

我想在我的 Django 应用程序中实现关注者/关注功能。

我为每个 User (django.contrib.auth.User) 都有一个 UserProfile 类:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique = True, related_name = 'user')
    follows = models.ManyToManyField("self", related_name = 'follows')

所以我尝试在 python shell 中这样做:

>>> user_1 = User.objects.get(pk = 1) # <-- mark
>>> user_2 = User.objects.get(pk = 2) # <-- john
>>> user_1.get_profile().follows.add(user_2.get_profile())
>>> user_1.get_profile().follows.all()
[<UserProfile: john>]
>>> user_2.get_profile().follows.all()
[<UserProfile: mark>]

但是正如你所看到的,当我在一个用户的follows 字段中添加一个新用户时,也会在另一侧添加对称关系。字面意思:如果 user1 跟随 user2,那么 user2 也跟随 user1,这是错误

我的错误在哪里?你有办法实现追随者和正确追随吗?

谢谢你们。

【问题讨论】:

【参考方案1】:

在 Many2Many 关系中将 symmetrical 设置为 False:

follows = models.ManyToManyField('self', related_name='follows', symmetrical=False)

【讨论】:

symbolic=False 和 related_name='fie+' 有什么区别?【参考方案2】:

除了 mouad 的回答,我可以建议选择一个不同的 *related_name*:如果 Mark follows John,那么 Mark 是 John 的 followers 之一,对吧? p>

【讨论】:

以上是关于如何在 Django 中实现追随者/追随者的主要内容,如果未能解决你的问题,请参考以下文章

Django 上的用户追随者模型。不能在指定中间模型的 ManyToManyField 上使用 add()。改用accounts.Contact的经理

如何在 appengine 中为追随者流建模?

关注Django中的twitter用户,你会怎么做?

Django 模型:用户和关注者的数据库设计

节点Sequelize追随者/追随者关系

Laravel 追随者/追随者关系