2014-09-07 5 views
0

모든 내 도시를 표시하려면 ListView을 사용하려고합니다.ListView에 표시된 항목과 관련된 개체를 계산하는 방법은 무엇입니까?

그러나 각 도시마다 거주하는 시민의 수를 표시하고 싶습니다.

Models.py

class Town(models.Model): 
    name = models.CharField() 

class Citizen(models.Model): 
    name = models.CharField() 
    town = models.ForeignKey(Town) 

Views.py

class TownView(ListView): 
    model = Town 
    def get_context_data(self, **kwargs): 
     context = super(TownView, self).get_context_data(**kwargs) 
     context['towns'] = Town.objects.all().prefetch_related('players') 
     return context 

나는 도시보기에서 플레이어의 속성이 있다면 prefetch_related (가)만을 통해 아마 작동하기 때문이 작동하지 않습니다 manytomany 필드입니다.

각 마을마다 자신의 프래그가 설정된 마을의 수를 어떻게 검색 할 수 있습니까?

또한 내 서식 파일은 어떻게 생겼을까요?

템플릿

<table> 
{% for town in open_towns %} 
    <tr> 
     <td><a href="/town/join/{{ town.slug }}/">{{ town.name }}</a></td> 
     <td>population : {{ Player.objects.filter(town=town).count() }}</td> 
    </tr> 
{% endfor %} 
</table> 

을하지만이 너무 분명 잘못 : 현재는 다음과 같습니다.

Town.objects.annotate(population=Count('players')) 

그리고 템플릿 :

답변

2

당신이 필요 annotate 기능 같은데 실제로 여기에 필요한 것은

<table> 
{% for town in open_towns %} 
    <tr> 
     <td><a href="/town/join/{{ town.slug }}/">{{ town.name }}</a></td> 
     <td>population : {{ town.population }}</td> 
    </tr> 
{% endfor %} 
</table> 
3

은 주석이다. 모든 메소드를 대체하지 않고도이 작업을 수행 할 수 있습니다.

from django.db.models import Count 

class TownView(ListView): 
    queryset = Town.objects.all().annotate(citizen_count=Count('citizen')) 

이제 object_list의 각 요소는 citizen_count 특성을 갖는다.

관련 문제