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]

2
Black Fox 15 Mei 2016, 23:26
1
Saya tidak yakin apakah ini yang Anda butuhkan; tapi bagaimana dengan first getting 5 random True type, then getting 7 random False type and combine these two query results?
 – 
alioguzhan
16 Mei 2016, 01:10

1 menjawab

Jawaban Terbaik

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.

1
Community 23 Mei 2017, 14:44