2016-05-15 76 views
2

美好的一天,我有一個問題:我有一個模型與一些字段。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]

+1

我不確定這是否是您需要的;但是'先得到5個隨機True類型,然後得到7個隨機False類型並將這兩個查詢結果結合起來呢? – alix

回答

1

你可以做兩個查詢,一個用於水平,一個用於垂直對象。

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