Djang中查询集的过滤子集

2024-03-29 05:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这些模型:

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

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


Tags: falsedatemodeltitlemodels会议nulllength
1条回答
网友
1楼 · 发布于 2024-03-29 05:43:20

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

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 %}

相关问题 更多 >