निम्नलिखित सेटअप में, मुझे प्रोजेक्ट्स की एक सूची के साथ एक क्वेरीसेट चाहिए, प्रत्येक अपनी कार्य अवधि (कार्यों के रूप में) के योग के साथ एनोटेटेड और उसके सभी कार्यों का योग ' subtask अवधि (subtasks_duration के रूप में)। मेरे मॉडल (सरलीकृत) इस तरह दिखेगा:एकाधिक एनोटेट योग शब्द बढ़ते उत्तर
Projects.objects.annotate(tasks_duration=Sum('task__duration'), subtasks_duration=Sum('task__subtask__duration'))
व्यवहार से संबंधित Django annotate() multiple times causes wrong answers में विस्तार से बताया मैं एक tasks_duration बहुत अधिक की तुलना में यह होना चाहिए कि मिल:
class Project(models.Model):
pass
class Task(models.Model):
project = models.ForeignKey(Project)
duration = models.IntegerField(blank=True, null=True)
class SubTask(models.Model):
task = models.ForeignKey(Task)
duration = models.IntegerField(blank=True, null=True)
मैं इस तरह मेरी क्वेरीसमूह बनाते हैं। एकाधिक एनोटेट (Sum()) खंड परिणामस्वरूप एसक्यूएल में कई बाएं आंतरिक जुड़ते हैं। कार्यों_ अवधि के लिए केवल एक ही एनोटेट (Sum()) शब्द के साथ, परिणाम सही है। हालांकि, मैं दोनों कार्य_ अवधि और subtasks_duration दोनों चाहते हैं।
इस प्रश्न को करने का एक उपयुक्त तरीका क्या होगा? मेरे पास एक कामकाजी समाधान है जो प्रति परियोजना करता है, लेकिन यह अपेक्षाकृत असामान्य रूप से धीमा है। मेरे पास एक अतिरिक्त() कॉल के साथ कुछ भी काम कर रहा है, लेकिन मैं वास्तव में जानना चाहता हूं कि शुद्ध Django के साथ मैं क्या चाहता हूं।
आप का प्रयास किया था 'tasks_duration = योग ('task__duration', अलग = सच), subtasks_duration = योग ('task__subtask__duration', अलग = सच)' के रूप में आपके द्वारा जुड़े दूसरे प्रश्न में उल्लिखित? – jpic
यह केवल विशिष्ट अवधि मानों को पूरा करेगा, जो मैं नहीं चाहता हूं। जिज्ञासा से मैंने कोशिश की, अभी भी वही गलत मूल्य उत्पन्न करता है। (अवधि भिन्न होती है) –
कभी इसके लिए कोई समाधान मिलते हैं? मैं एक क्वेरीसेट पर एक योग और गिनती को एनोटेट करने की कोशिश कर रहा हूं, और राशि गुणा हो रही है ... – StephenTG