在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查询集上的注释方法或类似的东西来进行这种注释?