python - ترتيب مخصص في دجانجو
django django-models (3)
كيف يمكنك تحديد طلب محدد في Django QuerySet
s؟
على وجه التحديد ، إذا كان لدي 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
يعتمد ذلك على المكان الذي تريد استخدامه فيه.
إذا كنت ترغب في استخدامه في القوالب الخاصة بك ، فإنني أقترح كتابة علامة قالب ، والتي ستقوم بتنفيذ الطلب نيابة عنك. في ذلك ، يمكنك استخدام أي خوارزمية الفرز التي تريد استخدامها.
في المشرف أقوم بالفرز المخصص عن طريق توسيع القوالب لاحتياجاتي وتحميل علامة قالب كما هو موضح أعلاه