2010-04-15 6 views
5

मेरे पास एक कस्टम list_display फ़ील्ड है जो मेरे व्यवस्थापक पृष्ठों में से एक में पूर्णांक के कॉलम के लिए ज़िम्मेदार है।एक कस्टम list_display फ़ील्ड द्वारा Django व्यवस्थापक में सॉर्टिंग की अनुमति कैसे दें, जिसमें डीबी फ़ील्ड नहीं है और न ही एनोटेटेबल

मुझे कर्मचारियों के सदस्यों को इसके अनुसार क्रमबद्ध करने की अनुमति देने की आवश्यकता है।

यह समझने के लिए एक समाधान है कि अगर पूर्णांक कुछ डीबी क्षेत्र की गणना/औसत/आदि का प्रतिनिधित्व करता है, जो मेरे लिए मामला नहीं है।

[कि मामले के लिए यहाँ समाधान है: Django admin: how to sort by one of the custom list_display fields that has no database field ]

कोई भी विचार मैं वास्तव में बनाने और मूल्यों के लिए एक डीबी क्षेत्र को बनाए रखने के बिना इस छंटाई कैसे प्राप्त कर सकते हैं?

+0

http://stackoverflow.com/a/3351431/17498 –

उत्तर

5

सॉर्टिंग डीबी इंजन (खंड द्वारा क्रम में) पर की जाती है, इसलिए मुझे नहीं लगता कि आप जो भी चाहते हैं उसे प्राप्त करने में सक्षम होंगे जब तक आप मॉडल में किसी फ़ील्ड को पूरा नहीं करते। गणना किए गए राज्य इस बिंदु पर क्रमबद्ध नहीं हैं (कम से कम व्यवस्थापक इंटरफ़ेस में नहीं, यदि आप अपने स्वयं के इंटरफ़ेस का उपयोग कर रहे थे तो आप extra का उपयोग कर सकते हैं)।

यदि समस्या फ़िल्टरिंग हो रही थी, तो आप एक कस्टम फ़िल्टरस्पेक लिख सकते हैं (जो कहीं भी प्रलेखित नहीं होता है, लेकिन SO में good example है)।

लेकिन व्यवस्थापक में सॉर्ट करने के लिए आपका एकमात्र विकल्प भौतिक क्षेत्र है, मुझे डर है।

संपादित करें:

हममम ...

तुम कुछ की कोशिश कर सकते। ModelAdmin द्वारा उपयोग की जाने वाली क्वेरीसेट को बदलने के लिए It is possible (हालांकि मुझे नहीं लगता कि यह औपचारिक रूप से कहीं भी दस्तावेज है)।

class BlahAdmin(admin.ModelAdmin): 
    ... Whatever definitions ... 

    def queryset(self, request): 
     return Blah.objects.extra(select={'computed': "count(field_x)"}) 

यह काम कर सकते हैं: अपने गणना क्षेत्र सरल है यदि पर्याप्त क्वेरी ही आप की तरह कुछ कर सकता है में एम्बेड करने के लिए। हालांकि यह अनचाहे है।

+0

यदि आपकी ऑब्जेक्ट प्रॉक्सी हुई है, तो आपको प्रॉक्सी मेटा क्लास में ऑर्डर करना होगा: ऑर्डरिंग = ['कंप्यूटेड',] अन्यथा यह ' आईडी 'किसी कारण से। – fastmultiplication