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
也不是必需的。@威廉,不客气!我会根据你的评论更新答案。