Django覆盖ManyRelatedManager

时间:2014-09-22 19:49:05

标签: python django

我的Django应用程序中有一个标准的User,Friendship模型。

在User模型中,我通过Friendship模型定义了具有自我关系的“friends”ManyToMany字段。

    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.friends.all()返回user2 ..... user2.friends.all()没有任何回报。

由于user1.friends是ManyRelatedManager,我需要覆盖此管理器以重新实现搜索功能逻辑(例如:在from_user和to_user字段中使用Q对象进行搜索)。

将get_friends(self)添加到我的模型的解决方案似乎不行...... 我可以在朋友字段中使用@property装饰器吗? 有什么建议吗?

0 个答案:

没有答案