2012-08-27 10 views
7

bu sorguyu düşünün:django'da, tek bir sorguda ilgili bir nesneyle bir sorguya doğrudan açıklama eklemek için bir yol var mı?

query = Novel.objects.< ...some filtering... >.annotate(
    latest_chapter_id=Max("volume__chapter__id") 
) 

Aslında bu sorgu sonra açıklamalı kimliklerine göre fiili nesneleri seçmek için başka bir sorgu yürütmek zorunda, en son Chapter nesne ile her Novel açıklama etmektir gerekenler. IMO bu çirkin. Onları tek bir sorguda birleştirmenin bir yolu var mı?

+0

Bunun yerine bölümleri romanlarla anlatabilir misiniz? –

+0

Bana göre değil, çünkü her bir roman için sadece en yeni bölümlere ihtiyacım var, ama bir romanda birçok bölüm var ve bölümler farklı ciltlerde. Bildiğim kadarıyla (') bu durumda faydasız (yanlışsam beni düzelt), ve romanın başlaması dışında tam olarak bir bölüm seçmenin başka bir yolunu bilmiyorum. Herhangi bir fikir? – SAPikachu

cevap

2

Hayır, bunları tek bir sorguda birleştirmek mümkün değildir.

İki geçici çözümü bulmak için aşağıdaki blog post okuyabilirsiniz.

+2

Rune-kaagaard'ın cevabı şimdi daha iyi. – qznc

+1

Bağlantılı gönderi, sorguda extra() kullanılmasını önerir. Django 1.8'den itibaren extra() önerilmemekte ve kullanımdan kaldırılmamaktadır. – johanno

15

Evet, mümkün.

from django.db.models.expressions import F 
from django.db.models.aggregates import Max 

Chapters.objects.annotate(last_chapter_pk=Max('novel__chapter__pk') 
      ).filter(pk=F('last_chapter_pk')) 

Django 1.7 üzerinde test:

basitçe yapmak, onların Romanlarında son tüm Bölümler içeren bir Sorgu Kümesi almak için.

İlgili konular