在Django中扩展相同模型上的两个相关查询

时间:2014-11-27 12:27:39

标签: django django-models

考虑一个在两个其他模型实例之间形成连接的Django模型:

class User(models.Model):
    pass

class Meeting(models.Model):
    user_a = models.ForeignKey(User, related_name='a_meetings')
    user_b = models.ForeignKey(User, related_name='b_meetings')

现在假设您要定义一个返回所有User会议的函数,无论他是a还是b。天真的实施将是:

class User(models.Model):
    @property
    def meetings(self):
        return list(self.a_meetings.all()) + list(self.b_meetings.all())

让这个函数返回匹配的QuerySet而不是列表的“正确”方法是什么?优惠解决方案的奖励积分不使用丑陋的Q查询;)

1 个答案:

答案 0 :(得分:2)

我认为Qs在这里是不可避免的。

这些事情的主要原则始终是从你真正想要得到的模型开始:所以既然你想要开会,就从那里开始。

return Meeting.objects.filter(Q(user_a=self) | Q(user_b=self))