python - ترتيب مخصص في دجانجو




django django-models (3)

كيف يمكنك تحديد طلب محدد في Django QuerySet

على وجه التحديد ، إذا كان لدي QuerySet مثل: ['a10', 'a1', 'a2'] .

النظام العادي (باستخدام Whatever.objects.order_by('someField') ) سوف يعطيني ['a1', 'a10', 'a2'] ، بينما أبحث عن: ['a1', 'a2', 'a10'] .

ما هي الطريقة المناسبة لتحديد تقنية الطلب الخاصة بي؟


@ جارت جواب (تفعل هذا النوع في بيثون) يعمل بشكل كبير للحالات البسيطة. بمجرد أن يكون لديك جدول كبير وتريد ، على سبيل المثال ، سحب الصفحة الأولى فقط من النتائج التي تم فرزها بطريقة معينة ، فواصل هذا الأسلوب (يجب عليك سحب كل صف من قاعدة البيانات قبل أن تتمكن من القيام بهذا النوع). عند هذه النقطة ، سأبحث في إضافة حقل "فرز" تم تسميته من الحقل "اسم" في وقت التوفير ، بحيث يمكنك الفرز على مستوى DB بالطريقة المعتادة.


إذا كان لديك مجموعات بيانات أكبر وباستخدام بالإضافة إلى ذلك SOLR backend (على سبيل المثال مع Haystack):

استخدم solr.ICUCollationField مع الخيار numeric=true كنوع حقول الفرز. هذا الفرز وفقًا للغة وإذا كانت الأرقام موجودة ، فسيتم فرز جزء الرقم وفقًا للقواعد الرقمية بدلاً من فرز السلسلة.

انظر: https://cwiki.apache.org/confluence/display/solr/Language+Analysis#LanguageAnalysis-UnicodeCollation http://www.solr-start.com/javadoc/solr-lucene/org/apache/solr/schema/ICUCollationField.html


يعتمد ذلك على المكان الذي تريد استخدامه فيه.

إذا كنت ترغب في استخدامه في القوالب الخاصة بك ، فإنني أقترح كتابة علامة قالب ، والتي ستقوم بتنفيذ الطلب نيابة عنك. في ذلك ، يمكنك استخدام أي خوارزمية الفرز التي تريد استخدامها.

في المشرف أقوم بالفرز المخصص عن طريق توسيع القوالب لاحتياجاتي وتحميل علامة قالب كما هو موضح أعلاه





django-models