Aşağıdaki kurulumda, her biri tüm görev sürelerinin (task_duration olarak) ve tüm görevlerinin toplamının toplamı ile açıklanmış bir proje listesi içeren bir QuerySet'i istiyorum. subtask süreleri (subtasks_duration olarak). (Basitleştirilmiş) Benim modelleri şu şekilde görünür: davranışa İlişkinmultiple annotate Toplam terim sayısı şişirilmiş yanıt verir
Projects.objects.annotate(tasks_duration=Sum('task__duration'), subtasks_duration=Sum('task__subtask__duration'))
Django annotate() multiple times causes wrong answers açıklandığı ben olması gerektiği çok daha yüksek bir tasks_duration olsun:
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)
Bu gibi benim QuerySet olun. Çoklu ek açıklama (Sum()) cümleleri, ortaya çıkan SQL'de çoklu sol iç birleştirmeler sağlar. Tasks_duration için sadece bir tek notla (Sum()) terimi ile sonuç doğrudur. Ancak, hem task_duration hem de subtasks_duration sahip olmak isterim.
Bu sorguyu yapmak için uygun bir yol ne olurdu? Proje başına düşen bir çalışma çözümüm var ama bu beklenmedik bir şekilde yavaş. Ekstra bir() çağrısı ile çalışan benzer bir şeyim var, ama istediğim şeyin saf Django ile mümkün olup olmadığını bilmek isterim.
: Yani bir hile kullanmak ve bir ORM aşağıda gibi yazabilirsiniz bağlandığınız diğer soruda bahsedilen? – jpic
Bu, yalnızca istediğim gibi olmayan belirli süre değerlerinin toplamına hizmet edecektir. Ben merak ettim, hala aynı yanlış değerleri verir. (süreler değişebilir) –
Bunun için bir geçici çözüm buldunuz mu? Ben bir queryset üzerinde bir toplamı ve bir sayımı eklemeye çalışıyorum ve toplam tutar çoğalmaya devam ediyor ... – StephenTG