2014-04-11 4 views
0

나는 장고에 모든 선수를 가져 와서 (경량, 중량급 등) 카테고리로 정렬 한 다음 각 카테고리의 선수들을 맨 위에서 정렬하여 표시하는 응용 프로그램을 작성하고 있습니다. 하단 득점 선수에게 득점하는 선수. 나는 선수들을 클래스로 분류하기 위해 템플릿을 얻을 수 없다. 모든 운동 선수를 표시하거나 표시하지 않습니다. 여기 Django 템플릿 필터 2 ManytoMany 필드

내 모델과 템플릿의 관련 부분은 다음과 같습니다

선수가 여러 부문에서 할 수 있으며, 각각의 카테고리는 여러 선수가있다. 또한 범주는 날짜순으로 정렬됩니다.

models.py

class Entry(models.Model): 
    athlete = models.ForeignKey(Athlete, related_name='entries') 
    event = models.ForeignKey(Event, related_name='entries') 
    athlete_category = models.ManyToManyField(Category, related_name='entries') 
    athlete_score = models.CharField(max_length=20, blank=True) 
    placing = models.SmallIntegerField(blank=True, null=True) 

class Category(models.Model): 
    category_name = models.CharField(max_length=100) 

class CategoryOrder(models.Model): 
    event = models.ForeignKey(Event) 
    category = models.ForeignKey(Classes) 
    category_order = models.SmallIntegerField() 

템플릿을 기반으로 해당 범주에서 다음 선수 모두 각각의 카테고리를 나열하기로하고

{% for category in categories %} 
    <p>{{ category.category_name }}</p> 
     {% for entry in entries %} 
      {% for athlete_category in entry.athlete_category %} 
       {% if athlete_category == category %} 
        <p>{{ entry.athlete.first_name }} {{ entry.athlete.last_name }} - {{ entry.placing }}</p> 
       {% endif %} 
      {% endfor %} 
     {% endfor %} 
{% endfor %} 

event_placings.html 자신의 자본 매출. 출력은 다음과 같아야합니다

남성 경량
신원 미상 - 1
조 공공 - 2

여성 경량
신원 미상 - 1
에바 브라운 - 2

현재 받고 있습니다 :

남 욕실의 경량

여성 경량

그것은 범주를 나열하지만 선수. 내가 어디로 잘못 가고 있니?

답변

0

템플릿에 불필요한 루프가있는 것 같습니다. 그냥 이렇게 될 수 있습니다 :

{% for category in categories %} 
    <p>{{ category.category_name }}</p> 

    {% for entry in category.entries %} 
     <p>{{ entry.athlete.first_name }} {{ entry.athlete.last_name }} - {{ entry.placing }}</p> 
    {% endfor %} 
{% endfor %} 

운동 선수의 순서는 두 번째 경우

def athletes_ordered(self): 
    return self.entries.order_by('athlete_score') 

같은 것을 사용하여 Category 클래스에 Entry 클래스 Meta ordering을 사용하거나 방법 def athletes_ordered(self)을 할 수 maintane하려면 템플릿에서 category.entriescategory.athletes_ordered으로 대체해야합니다.

+0

그 트릭을했습니다. 완전한! 고맙습니다. – Nse