Apabila membina sistem carian Django yang kompleks, anda mungkin menghadapi keperluan untuk menggabungkan hasil daripada berbilang model. Untuk mencapai penomboran pada hasil gabungan, anda boleh memanfaatkan paparan object_list generik. Walau bagaimanapun, cabarannya terletak pada penggabungan QuerySets yang berasingan.
Walaupun percubaan awal anda untuk membuat senarai dengan menambahkan item daripada setiap QuerySet adalah pendekatan yang mudah, ia memperkenalkan isu kritikal. Senarai yang terhasil tidak mempunyai atribut klon, yang penting untuk paparan generik.
Untuk menyediakan penyelesaian yang mantap, pertimbangkan untuk menggunakan fungsi itertools.chain. Pendekatan berulang ini menggabungkan QuerySets ke dalam senarai baharu. Tidak seperti pendekatan anda sebelum ini, itertools.chain dilaksanakan dalam C, menawarkan prestasi unggul dan kecekapan ingatan.
from itertools import chain result_list = list(chain(page_list, article_list, post_list))
Pendekatan yang dioptimumkan ini mengekalkan integriti QuerySets, memastikan keserasian dengan paparan generik.
Selain itu, anda mempunyai fleksibiliti untuk mengisih senarai_hasil yang digabungkan mengikut mana-mana kriteria yang dikehendaki. Contoh berikut menunjukkan cara mengisih mengikut tarikh dibuat, dengan kedua-dua pilihan menaik dan menurun:
from operator import attrgetter # Sort by date created in ascending order result_list = sorted( chain(page_list, article_list, post_list), key=attrgetter('date_created') ) # Sort by date created in descending order result_list = sorted( chain(page_list, article_list, post_list), key=attrgetter('date_created'), reverse=True )
Dengan memanfaatkan itertools.chain, anda boleh menggabungkan berbilang Set Pertanyaan dengan cekap dan mengekalkan susunan hasil yang diingini, menjadikan Django anda sistem carian berkuasa dan mesra pengguna.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Berbilang Set Pertanyaan Django dengan Cekap untuk Penomboran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!