如何在Djang实现followers/following

2024-05-02 07:54:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Django应用程序中实现followers/following特性。

对于每个用户(django.contrib.auth.User),我都有一个用户配置文件类:

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后面,这是错误的。

我的错在哪里?你有没有一种方法来实现跟随者和正确的跟随?

谢谢你们。


Tags: 用户namegetobjectsmodelsallprofilejohn
2条回答

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

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

除了穆阿德的回答外,我是否可以建议选择一个不同的*相关名称:如果马克跟随约翰,那么马克就是约翰的跟随者之一,对吧?

相关问题 更多 >