Список идентификаторов детей в шаблоне django
Вот мой models.py:
#child
class Country(models.Model):
name = models.CharField(max_length=255)
wine_rg = models.ManyToManyField(WineRegion, blank=True)
#parent
class WorldRegion(models.Model):
name = models.CharField(max_length=255)
country = models.ManyToManyField(Country, blank=True)
def __str__(self):
return self.name
views.py:
world_region_filters = WorldRegion.objects.all()
templates/test.html:
{% for world_region in world_region_filters %}
{{ world_region.name }} - {{ return list of country ID }}
{% endfor %}
Как вернуть все ID стран (дочерних) в шаблоне django? Я знаю, что могу сделать это:
{% for country in world_region.country.all %} {{ country.id }} {% endfor %}
Но есть ли способ сделать его короче? Я пробовал следующее:
{{ world_region.country.all.id }}
Но это не работает. Есть предложения?
Если вы используете PostgresSQL, то вы можете использовать ArrayAgg следующим образом:
from django.contrib.postgres.aggregates.general import ArrayAgg
from django.db.models import Count
world_region_filters = WorldRegion.objects.all().annotate(
country_list=ArrayAgg('country', distinct=True),
)
Я не знаю, зачем вам нужен список идентификаторов в html. все, что вы реализовали, хорошо, но если вам нужен список идентификаторов, возможно, вы можете сделать так:
data = WorldRegion.objects.all().values("name", "country_id")
region_names = [ i['name'] for i in data ]
country_ids = [ i['country_id'] for i in data ]
тогда вы можете передать его в html как контекст