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

Fre*_*ins 15 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')
Run Code Online (Sandbox Code Playgroud)

所以我试着在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>]
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,当我向用户的follows字段添加新用户时,还会在另一侧添加对称关系.从字面上看:如果user1跟随user2,user2也跟随user1,这是错误的.

哪里是我的错?你有没有办法实施粉丝并正确遵循?

感谢你们.

mou*_*uad 24

在Many2Many关系中将对称设置为False:

follows = models.ManyToManyField('self', related_name='follows', symmetrical=False)
Run Code Online (Sandbox Code Playgroud)

  • symmetrical = False和related_name ='fie +'有什么区别? (2认同)

XOR*_*ist 14

除了mouad的回答,可能我建议您选择一个不同的*related_name*:如果马克如下约翰,随后马克是约翰的一个追随者,对不对?