Python Django中查询集的过滤器子集

Python Django中查询集的过滤器子集,python,django,django-queryset,django-filter,Python,Django,Django Queryset,Django Filter,我有这些模型: 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 = m

我有这些模型:

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)
我希望我的视图返回登录用户所在的所有委员会,并且只返回已经发生的会议。我正在尝试以下代码:

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())

这给了我一个查询集,不包括今天之前没有开会的委员会。我想要的是让所有的委员会,会议设置为按日期过滤。还有其他方法吗?

如果您只想参加特定的会议,请使用预回迁。它将链接到所有相关的
委员会
对象:

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)

然后,要在您使用的模板中访问过去的会议,请执行以下操作:

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

如果您只想获得特定的会议,请使用预回迁。它将链接到所有相关的
委员会
对象:

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)

然后,要在您使用的模板中访问过去的会议,请执行以下操作:

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

听起来你在要求两件不同的事情;用户所属的委员会及其过去的会议。是这样吗?请澄清您希望通过日期过滤的
会议设置做什么。您希望在什么日期筛选所有会议<代码>日期
不是委员会的一部分。
日期
是与委员会相关的会议的一部分。我想让委员会的会议在委员会的
会议集中按日期过滤。实际上,它会返回所有相关的会议。听起来你要求的是两件不同的事情;用户所属的委员会及其过去的会议。是这样吗?请澄清您希望通过日期过滤的
会议设置做什么。您希望在什么日期筛选所有会议<代码>日期
不是委员会的一部分。
日期
是与委员会相关的会议的一部分。我想让委员会的会议在委员会的
会议集中按日期过滤。实际上,它会返回所有相关的会议。这正是我需要的。在
时区之后,它只缺少一个
。now()
。非常感谢你!for中的
.all
也不是必需的。@威廉,不客气!我会根据你的评论更新答案。这正是我需要的。在
时区之后,它只缺少一个
。now()
。非常感谢你!for中的
.all
也不是必需的。@威廉,不客气!我会根据你的评论更新答案。