通过Django中设置的相关对象的补充来注释QuerySet

时间:2016-05-18 18:39:43

标签: django django-models django-queryset

在Django中用另一个查询集注释查询集中的每个对象会有什么好办法?我想通过相关模型对象的查询集来注释查询集中的每个对象,这些对象与对象没有活动关系。也就是说,通过相关对象集的补充来注释查询集。

或许可以更容易地考虑以下简单的精简模型:

class Member(models.Model):
    pass

class Voting(models.Model):
     votes = models.ManyToManyField(Member)

现在,考虑一个简单的查询集:

votings = Voting.objects.all()

所有这些投票对象都有votes字段,其中包含一组已投票的成员对象。是否可以使用一组尚未在该投票中投票的成员对象来注释每个Voting对象?动机:我想列出所有(或一些过滤的)投票并显示每个成员的投票,并显示尚未投票的成员。

一种可能的解决方案:

votings = list(votings)
for voting in votings:
    voting.not_voted_members = Member.objects.exclude(voting=voting)

但是这需要对每个投票进行数据库查询,这听起来并不好。也许在Python中进行注释会更好:

members = Member.objects.all()
for voting in votings:
    voting.not_voted_members = [member for member in members
                                if member not in voting.votes.all()]

但是有更好的方法吗?特别是,我想知道我是否可以通过使用例如Voting查询集上的注释方法或类似的东西来进行这种注释?

0 个答案:

没有答案