Selamat siang, saya punya masalah: Saya punya model dengan beberapa bidang.
class Gallery(models.Model):
image = models.FileField(upload_to='gallery/')
status = models.BooleanField()
type = models.BooleanField()
Saya menggunakan model ini untuk menyimpan gambar galeri di grid masonry. Kisi ini diperbaiki dan saya perlu mendapatkan 12 gambar acak, ini mudah dilakukan.
gallery = Gallery.objects.all().order_by('id','pk').order_by('?')[: 12];
Tetapi 5 dari mereka harus memiliki tipe Benar, dan 7 lainnya - Salah. Dan saya akan sangat senang jika dapat menyesuaikan pesanan di queryset ini, misalnya, Benar berarti gambar horizontal(h), Salah - vertikal[v]. Saya mau order seperti ini [v,h,h,h,v,v,v,h,h,v,v,v]
1 menjawab
Anda dapat melakukan dua kueri, satu untuk objek horizontal dan satu untuk objek vertikal.
horizontal = Gallery.objects.filter(type=True).order_by('?')[:7]
vertical = Gallery.objects.filter(type=False).order_by('?')[:5]
Kemudian buat daftar dari dua set kueri Anda
gallery = [verical[0]] + horizontal[0:3] + vertical[1:4] + horizontal[3:] + vertical[4:]
Perhatikan bahwa order_by docs memperingatkan bahwa order_by('?')
mungkin lambat. Jika Anda mengalami masalah kinerja, Anda mungkin ingin mencari pendekatan alternatif. Lihat pertanyaan ini misalnya.
first getting 5 random True type, then getting 7 random False type and combine these two query results
?