如何在Django中实现关注者/关注者

时间:2011-06-02 17:45:13

标签: python django django-orm

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

我为每个用户(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,这是错误

我的错误在哪里?你有没有办法实现关注者并正确遵循?

谢谢你们。

2 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:13)

除了mouad的回答,我可以建议选择不同的* related_name *:如果Mark 跟随 John,那么Mark是John的粉丝之一,对吗?