Ben ı Aşağıdaki 3 modelleri var diyelim yeniAçıklamalar orm
ilgili sorunlar yaşıyorum:
class Author(models.Model):
name = models.TextField()
class Book(models.Model):
author = models.ForeignKey(Author, related_name='books')
title = models.TextField()
is_fiction = models.BooleanField()
class SpeakingEvent(models.Model):
author = models.ForeignKey(Author, related_name='events')
date = models.DateField()
Ve açıklamalı Yazarlar tek Sorgu Kümesi almak istedim yayınlanan kurgu kitaplarının sayısı ve gelecekteki konuşma olaylarının sayısı ile.
Yani, aşağıdakileri yapabilirsiniz:
Author.objects.all().annotate(
future_speaking=Sum(Case(
When(events__date__gte=timezone.now(),
then=1),
default=0)),
fiction_count=Sum(Case(
When(books__is_fiction=True,
then=1),
default=0)),
)
Ancak, ortaya çıkan rakamlar çok yüksek. Eğer m kitap ve n olayları varsa, o zaman kitap sayısı için
<correct_result> * n
olay sayısı için
<correct_result> * m
sonucunu bitiririz. Bu, django'nun iki tabloyu bir sol birleştirmeyle birleştirmesi nedeniyle oluşur. Ek açıklamalardan birini bırakırsam sonuçlar doğrudur.
Birleştirmelerde değişiklik yapmak için herhangi bir yol var mı?
Bu, bu gibi görünüyor. Ne yazık ki benim durumum sadece Count() ile sınırlı değil, ama ben geldiğim bir geçici çözüm ekleyeceğim – JeffS