2010-03-18 3 views
3

이것은 쉽지만 쉽지는 않지만 찾는 데 어려움이 있습니다. 나는 다음과 같습니다 :Django 쿼리 : 모델 인스턴스에 FK가있는 개체의 수를 계산하십시오.

App(models.Model): 
    ... 

Release(models.Model): 
    date = models.DateTimeField() 
    App = models.ForeignKey(App) 
    ... 

하나 이상의 릴리스가있는 모든 App 개체를 어떻게 쿼리합니까?

App.objects.all().annotate(release_count=Count('??????')).filter(release_count__gt=0) 

카운트 적어도 지금까지 내가 말할 수있는 관계를 스팬하지 않기 때문에 작동하지 않습니다

내가 입력을 시작했다.

보너스 :

궁극적으로, 나는 또한 최신 릴리스 날짜별로 앱을 정렬 할 수 있도록하고 싶습니다. 응용 프로그램에서 최신 릴리스 날짜를 캐싱 (캐싱)하여 조금 더 쉽고 저렴하게 만들고 릴리스 모델의 save 메서드에서 업데이트하는 방법을 생각하고 있습니다. 물론 더 좋은 방법은 없습니다.

편집 :

내가 장고 1.1을 사용하고 있습니다 - 회피하지 비록 강력한 이유가있는 경우 1.2의 기대 디바이스로 마이그레이션합니다. , 보너스의 경우

App.objects.annotate(release_count=Count('release')).filter(release_count__gt=0)\ 
    .order_by('-release__date') 

답변

4

당신은 사용할 수 있어야합니다. 그리고 그것은 꽤 빠릅니다.

+0

허, 그게 정확히 내가하려고했던 것이지만, 나는 그것이 통역사에서 한번도 시도한 적이 없다는 것을 확신했다. –

2
App.objects \ 
    .annotate(release_count=Count('release')) \ 
    .(release_count__gt=0) \ 
    .order_by('-release_count') 

날짜 필드를 비정규 화하는 순간에 유일한 해결책은 다음과 같습니다

+0

비정규 화하지 않고 출시 날짜별로 주문하는 것이 매우 간단합니다. 내 대답을 보라. –

+0

어리석은 나, 네 말이 맞아. –

관련 문제