簡體   English   中英

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

我希望我的觀點是返回已登錄用戶所在的所有委員會,僅返回已經舉行的會議。 我正在嘗試以下代碼:

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

這給我返回了一個查詢集,其中包括今天之前沒有開會的委員會。 我要得到的是所有委員會,然后按日期將Meeting_set過濾掉。 還有另一種方法嗎?

如果只想召開特定的會議,請使用預取。 它將鏈接到所有相關的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 %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM