2012-09-27 9 views
7

में PostgreSQL से डिफॉल्ट नल सॉर्टिंग व्यवहार को कैसे बदलें डिफ़ॉल्ट रूप से पोस्टग्रेएसक्यूएल उच्च मानों के रूप में उच्च मानों को मानता है, और इस तरह उन्हें पहले अवरोही प्रश्नों के लिए और अंतिम आरोही के लिए अंतिम रूप देता है।Django ORM

आप इस प्रश्न को प्रति प्रश्न या इंडेक्स सृजन में 'नलस्ट्स लास्ट' या 'नलल्स फर्स्ट' निर्दिष्ट करके संशोधित कर सकते हैं।

कच्चे प्रश्नों का उपयोग किए बिना, Django ORM के संयोजन के साथ मैं इसका उपयोग कैसे कर सकता हूं? आईई। जब मैं अपने क्वेरी_सेट में qs.order_by("-publish_start") जैसे कुछ जोड़ता हूं, तो मैं नल के लिए सॉर्टिंग कैसे निर्दिष्ट कर सकता हूं? या, एक विकल्प के रूप में, क्षेत्र/सूचकांक घोषणा पर।

उत्तर

9

मैं एक तरीका है कि डीबी इंजन कि extra का उपयोग कर, अशक्त एक बूलियन जाँच कर रही है, और जब बूलियन्स false < true छँटाई के द्वारा किसी भी तरह से (शून्य के रूप में उच्चतम या न्यूनतम मान) काम के लिए उपयुक्त है पता लगा सार्वभौमिक लगता है:

qs = qs.extra(select={'null_start': "publish_start is null"}, 
       order_by=['null_start', '-publish_start']) 
+0

यह कहने लायक है (क्योंकि मैं धीमा हूं और मुझे पता लगाने में थोड़ी देर लग गई) कि यदि आप चाहते हैं कि परिणाम पहले नल मानों के साथ हों, और फिर 'publ_start' आदेश दिया गया ASCending, आपको order_by कथन को उलट करने की आवश्यकता है: '['-null_start', 'publ_start']'। –

+0

'अतिरिक्त' प्रदर्शित किया गया है, इसके बजाय http://stackoverflow.com/a/35494930/15690 देखें। – blueyed

+0

@blueyed हां, जो स्टैक ओवरफ़्लो में 4-वर्षीय उत्तर हैं। वे अप्रचलित हो जाते हैं। इसके लिए डाउनवोट करने की जरूरत नहीं है ... –