मेरे पास एक मॉडल XYZ है और मुझे किसी दिए गए क्वेरीसेट के लिए फ़ील्ड ए, बी, और अभिव्यक्ति x/y के लिए अधिकतम मान प्राप्त करने की आवश्यकता है।Django अभिव्यक्तियों के साथ कुल प्रश्न
यह फ़ील्ड के लिए खूबसूरती से काम करता है। कुछ ऐसा:
>>> XYZ.all().aggregate(Max('a'))
... {'a__max': 10}
हालांकि, मुझे अभिव्यक्तियों के लिए ऐसा करने का कोई तरीका नहीं मिल रहा है। की तरह कुछ कोशिश कर रहा है: त्रुटि देता
>>> XYZ.all().aggregate(Max(F('x')/F('y')))
:
*** AttributeError: 'ExpressionNode' object has no attribute 'split'
और की तरह कुछ भी:
*** FieldError: Cannot resolve keyword 'x/y' into field. Choices are: a, b, x, y, id
कुछ कोशिश कर रहा है की तरह:
>>> XYZ.all().aggregate(Max('x/y'))
एक त्रुटि देता है
XYZ.all().extra(select={'z':'x/y'}).aggregate(Max('z'))
भी काम नहीं करता है और इसके बाद के संस्करण के रूप में ही त्रुटि देता है:
FieldError: Cannot resolve keyword 'z' into field. Choices are: a, b, x, y, id
एक हैक मैं यह कर पाया है:
XYZ.all().extra(select={'z':'MAX(x/y)'})[0].z
कौन वास्तव में कार्य करता है क्योंकि यह उत्पन्न करता है सही एसक्यूएल, लेकिन यह भ्रमित है क्योंकि मुझे जेड एट्रिब्यूट पर सही मूल्य मिलता है, लेकिन सही उदाहरण नहीं, वह अधिकतम मूल्य वाला है।
बेशक, मैं अतिरिक्त() और order_by() के साथ कच्चे प्रश्न या चाल का भी उपयोग कर सकता हूं, लेकिन यह वास्तव में मुझे समझ में नहीं आता है कि Django एक अच्छी तरह से समग्र प्रश्नों का समर्थन करने के लिए सभी तरह से जाता है, लेकिन अभिव्यक्तियों का समर्थन अपने स्वयं के एफ अभिव्यक्तियों के साथ भी नहीं कर सकता है।
क्या ऐसा करने का कोई तरीका है?
आप जानना चाहते हैं कि क्षमता 'उपयोग करने के लिए एफ दिलचस्पी हो सकती है()' समुच्चय में वस्तुओं [आगामी Django 1.8 रिलीज़ के भाग] (है https://code.djangoproject.com/ wiki/Version1.8Roadmap)। –