2014-05-12 1 views
0

필터링 하위 쿼리에 계산하기, 그때 부모 객체의 모든 자식 개체를 나열하는 방법을 각 자식 개체를위한 필터링 수를 가지고 그들? 나는 상위 모델과 하위 모델을 사용하는 경우에는 템플릿

는 예를 제공하기 위해, 우리는이 모델이 가정
class Category(models.Model): 
    ... 

class SubCategory(models.Model): 
    category = models.ForeignKey(Category) 
    .... 

class Tag(models.Model): 
    .... 

class Article(models.Model) 
    sub_category = models.ForeignKey(SubCategory) 
    tag = models.ForeignKey(Tag) 

그런 다음 우리는 그 범주에 대한 모든 SubCatoegories가 나열되는 카테고리, 대한 DetailView 있습니다. 이 목록에서 우리는 각 하위 범주 항목에 숫자가 포함되도록합니다. 포함 된 기사 수는 이고은 특정 태그입니다 (즉, 해당 하위 범주의 모두에 해당하지 않습니다. 빌드하는 것이 더 사소한 경우). 이런 식으로 뭔가 :

{% for sub_category in category.sub_category_set.all %} 
    {{ sub_category.name }} -- {{ sub_category.articles_set.filter(tag='xyz').all|length }} 

나는 이것이 결국 어떤 방법으로 views.py 및/또는 models.py에서 수행되어야한다 같아요. 나는 이것이 의미하는 바를 분명히하기 위해 이렇게 썼다. 그래서, 어떻게 이런 식으로 할 수 있습니까?

+0

두 질문 : 1.있다 sub_category 기사로 FK? 2. sub_category.articles_set.filter (tag = 'xyz')의 문제점 (count()? – zymud

+0

1. 아니오, 기사 만 sub_category합니다. 2. 템플릿에서 필터링을 수행 할 수 있다고 생각하지 않습니다. –

답변

1

보기에서이 작업을 수행해야합니다. 각 하위 범주에 대한 필터링 된 기사의 수를 얻기 위해 주석을 사용할 수 있습니다

from django.db.models import Count 

def my_view(request, other, arguments): 
    ... 
    subcategories = category.sub_category_set.filter(tag__tagname='xyz') \ 
          .annotate(num_articles=Count('article__id')) 
    ... 

패스 subcategories 템플릿 컨텍스트를하고 템플릿에 당신은이 작업을 수행 할 수 있습니다

{% for subcategory in subcategories %} 
    {{ subcategory.name }} -- {{ subcategory.num_articles }} 
{% endfor %} 
+0

매력처럼 작동했습니다! 고마워요! –

+0

태그가 'xyz'인 기사가 0 개있는 경우에도 어떻게 작동합니까? –

+0

당신은 이것에 대해 잘 알고있는 것 같아서 어쩌면 당신은 내 새로운 질문을보실 수 있습니다.이 질문은 이것을 확장합니다 : http://stackoverflow.com/questions/23636343/get-count-on-several-filtered-subqueries - 템플릿 –