django在一个QuerySet和滤波器方法中



i尝试在django应用中显示上5个项目,以及在true上设置的is_home的项目。

请提示如果这是"不错的"和正确的方法:

我的模型:

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]
context['event_list'] = Event.objects.filter(is_home=True).order_by(-id)[:5]

简单使用:

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

非常丑陋。

最新更新