Django查询集的自定义过滤器
问题描述:
美好的一天,我有一个问题:我有一个模型与一些字段。Django查询集的自定义过滤器
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个 - False。如果能够在此查询集中定制订单,我会非常高兴,例如,True表示水平图片(h),False - 垂直[v]。我想得到这样的命令[v,h,h,h,v,v,v,h,h,v,v,v]
答
你可以做两个查询,一个用于水平,一个用于垂直对象。
horizontal = Gallery.objects.filter(type=True).order_by('?')[:7]
vertical = Gallery.objects.filter(type=False).order_by('?')[:5]
然后从你的两个查询集构建列表
gallery = [verical[0]] + horizontal[0:3] + vertical[1:4] + horizontal[3:] + vertical[4:]
注意,order_by docs警告order_by('?')
可能会很慢。如果遇到性能问题,您可能需要寻找替代方法。例如,请参阅this question。
我不确定这是否是您需要的;但是'先得到5个随机True类型,然后得到7个随机False类型并将这两个查询结果结合起来呢? – alix