Django查询集的自定义过滤器

时间:2016-05-15 20:26:13

标签: python django django-queryset django-orm

美好的一天,我有一个问题:我有一些带有某些领域的模型。

class Gallery(models.Model):
    image = models.FileField(upload_to='gallery/')
    status = models.BooleanField()
    type = models.BooleanField()

我使用此模型在砖石网格中存储图库图像。这个网格是固定的,我需要得到12个随机图像,这很容易做到。

gallery = Gallery.objects.all().order_by('id','pk').order_by('?')[: 12];

但其中5个应该是True类型,还有7个其他 - 假。如果它能够在此查询集中自定义订单,我将非常高兴,例如,True表示水平图片(h),False表示垂直[v]。我想得到这样的订单[v,h,h,h,v,v,v,h,h,v,v,v]

1 个答案:

答案 0 :(得分:1)

您可以执行两个查询,一个用于水平查询,另一个用于垂直对象。

<

然后从两个查询集

构建列表
horizontal = Gallery.objects.filter(type=True).order_by('?')[:7]
vertical = Gallery.objects.filter(type=False).order_by('?')[:5]

请注意,order_by docs警告gallery = [verical[0]] + horizontal[0:3] + vertical[1:4] + horizontal[3:] + vertical[4:] 可能会很慢。如果遇到性能问题,您可能希望寻找替代方法。例如,请参阅this question