在 Django 中过滤查询集的子集

Filter subset of a queryset in Django

我有这些型号:

class Committee(models.Model):
    title = models.CharField("Title",max_length=50,null=False)
    members = models.ManyToManyField(User)

class Meeting(models.Model):
    title = models.CharField("Title",max_length=50,null=False)
    date = models.DateTimeField("Date",null=False)
    committee = models.ForeignKey(Committee, on_delete=models.CASCADE)

而且我希望我的观点 return 已登录用户所在的所有委员会,以及已经召开的会议。我正在尝试这段代码:

class MeetingsView(generic.ListView):
    template_name = 'meetings/index.html'
    context_object_name = 'committees_list'
    login_required = True

    def get_queryset(self):
        return Committee.objects.filter(members__id=self.request.user.id,meeting__date__lte=timezone.now())

这 return 是我的查询集,不包括今天之前没有会议的委员会。我想要的是让所有委员会和 meeting_set 按日期过滤。还有其他方法吗?

如果您只想获取特定会议,请使用预取。它将 link 所有相关 Committee objects:

def get_queryset(self):
    prefetch = Prefetch('meeting_set', queryset=Meeting.objects.filter(date__lte=timezone.now()), to_attr='past_meetings')
    return Committee.objects.filter(members__id=self.request.user.id).prefetch_related(prefetch)

然后在您使用的模板中访问过去的会议:[​​=13=]

{% for committee in committee_list %}
    {{ committee.past_meetings }}
{% endfor %}