2016-05-15 6 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 из них должны иметь Истинный тип, а 7 других - False. И я буду безумно счастлив, если он сможет настраивать заказ в этом наборе запросов, например, True означает горизонтальное изображение (h), False - vertical [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] 

Затем построить список из двух ваших querysets

gallery = [verical[0]] + horizontal[0:3] + vertical[1:4] + horizontal[3:] + vertical[4:] 

Обратите внимание, что order_by docs предупреждают, что order_by('?') может быть медленным. Если вы столкнулись с проблемами производительности, вам может понадобиться альтернативный подход. См. Например, this question.

 Смежные вопросы

  • Нет связанных вопросов^_^