django在一个queryset all和filter方法中

时间:2018-02-16 16:20:36

标签: python django filter django-queryset

我尝试在django app中显示,查看最后5项以及is_home设置为True的项目。

请提示这是否“好”且正确:

我的模特:

class Event(models.Model):
    title = models.CharField(max_length=500)
    date = models.DateField()
    is_home = models.BooleanField(default=False)

我在视图中的查询:

context['event_list'] = Event.objects.filter(Q(Event.objects.all()) | Event.objects.filter(is_home=True))[:5]

2 个答案:

答案 0 :(得分:2)

context['event_list'] = Event.objects.filter(is_home=True).order_by(-id)[:5]

答案 1 :(得分:1)

只需使用:

list(Event.objects.all().order_by('-id')[:5]) + list(Event.objects.filter(is_home=True))

不幸的是,你不能(据我所知)在拍摄切片之后将查询组合在一起,因此必须转换为列表。

如果真的希望拥有QuerySet,您可以这样做:

Event.objects.filter(Q(id__in=Event.objects.all().order_by('-id')[:5].values_list('id', flat=True)) | Q(is_home=True))

这非常难看。