在 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 %}
我有这些型号:
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 %}