在我的申请中,我需要查看人们的出勤情况,我想知道谁没有参加过两次或更多次会议。我有以下型号:
class Talk(models.Model):
title = models.CharField(max_length=200, primary_key=True)
speaker = models.CharField(max_length=200)
date_of_talk = models.DateField('date_of_talk')
def __unicode__(self):
return self.title
class Member(models.Model):
name = models.CharField(max_length=200)
talks = models.ManyToManyField(Talk, through='Event_Attendance')
def __unicode__(self):
return self.name
class Event_Attendance(models.Model):
talk = models.ForeignKey('Talk')
membersAttended = models.ForeignKey('Member')
如您所见,我会跟踪所有参与谈话的成员。
我对如何找到没有参加的成员的想法是让所有成员然后遍历它们以查明它们是否在Event_Attendance
表中。这是最好的方法还是Django有一种方法可以做到这一点?
答案 0 :(得分:2)
尝试:
Member.objects.annotate(talks_attended = Count('Event_Attendance')).filter(talks_attended__lt = 2)
这是未经测试的,但我认为是对的。这将有希望返回一个QuerySet,其中只包含那些没有参加过至少两次会谈的成员。
您可能会在Aggregation上找到相关文档。