[英]Django template filters 2 ManytoMany fields
我正在Django中編寫一個應用程序,該應用程序將一個事件中的所有運動員都進行分類,將他們分類(輕量級,重量級等),然后顯示從最高得分運動員到最低得分運動員排序的每個類別的運動員。 我沒有模板來將運動員分類。 它要么顯示所有運動員,要么不顯示。
這是我的模型和模板的相關部分:
一個運動員可能處於多個類別,每個類別都有多個運動員。 類別也按日期排序。
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()
event_placings.html
{% 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 %}
該模板應該列出每個類別,然后根據其位置列出該類別中的所有運動員。 輸出應為:
男子輕量級
約翰·杜(John Doe)-1
喬·大眾-2
女子輕量級
簡·多伊-1
伊娃·布勞恩-2
等等
目前我得到:
男子輕量級
女子輕量級
它列出了類別,但沒有列出運動員。 我要去哪里錯了?
看起來您的模板中有不必要的循環。 可能是這樣的:
{% 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 %}
要維護運動員的排序,您可以在Entry
類上使用Meta ordering
,也可以在Category
類上使用以下方法使方法def athletes_ordered(self)
類:
def athletes_ordered(self):
return self.entries.order_by('athlete_score')
在第二種情況下,您必須用模板中的category.athletes_ordered
替換category.entries
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.