Django覆盖ManyRelatedManag

2024-06-01 02:56:02 发布

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

我在Django应用程序中有一个标准的用户友谊模型。在

在用户模型中,我通过友谊模型定义了许多具有自我关系的“朋友”字段。在

    class User(AbstractBaseUser, PermissionsMixin):
    ...
        friends = models.ManyToManyField("self", through="Friendship",
                                 symmetrical=False, blank=True, verbose_name="Friends")
    class Friendship(models.Model):
        friendship_date = models.DateTimeField(auto_now_add=True, editable=False)
        from_user = models.ForeignKey(User, related_name="+")
        to_user = models.ForeignKey(User, related_name="+")

如果我实现对称关系,手动调用友谊的save()方法两次,代码:myUserObject.friends.all()返回所有朋友。在

但是,如果不实现对称关系,并且user1和user2是朋友,那么只有user1。朋友们。所有人()返回用户2。。。。。用户2。朋友们。所有人()不返回任何内容。在

因为user1.friends是ManyRelatedManager,所以我需要重写这个管理器来重新实现搜索函数逻辑(例如:使用Q对象在from_user和to_user字段中进行搜索)。在

在我的模型中添加get_friends(self)的解决方案似乎不太好。。。 我可以使用@property decorator for friends字段吗? 有什么建议吗?在


Tags: 用户name模型selffalsetrue关系models