我想在我的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,这是错误。
我的错误在哪里?你有没有办法实现关注者并正确遵循?
谢谢你们。
答案 0 :(得分:23)
在Many2Many关系中将symmetrical设置为False:
follows = models.ManyToManyField('self', related_name='follows', symmetrical=False)
答案 1 :(得分:13)
除了mouad的回答,我可以建议选择不同的* related_name *:如果Mark 跟随 John,那么Mark是John的粉丝之一,对吗?