我有ManyToManyField的模型:
class Action(models.Model):
title = models.CharField('title', max_length=160)
countries = models.ManyToManyField('Country', null=True, blank=True)
class Country(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255, blank=True)
每个操作都有一个包含说明页面的网址。每个国家都有一个带旗帜的图标。行动可能有2个或更多国家。所以输出应该是这样的:
我不知道如何解决这个问题。标记{%regroup%}无法正常工作,因为它仅在每个操作中按第一个国家/地区进行分组。
答案 0 :(得分:0)
我认为您需要编写自己的重组算法。如果它在所有应用程序中只使用一次,您可以在视图中创建它:
regrouped = {}
actions = Action.objects.all()
# be careful this implementation creates large amount of sql queries.
# you need to optimize it or cache it!
for action in actions:
country_key = '_'.join([country.pk for country in action.countries.all()])
if not country_key in regrouped:
regrouped[country_key] = {'countries': action.countries.all(), 'actions': []}
regrouped[country_key]['actions'].append(action)
在模板中:
{% for key, item in regrouped.items %}
Countries: {% for country in item.countries %}{{ country }};{% endfor %}
Actions: {% for action in item.actions %}{{ action }};{% endfor %}
{% endfor %}