Home > database >  List of child ID in django template
List of child ID in django template

Time:06-04

Here is my 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 %}

How to return all country ID (child) on django template? I know I can do this:

{% for country in world_region.country.all %} {{ country.id }} {% endfor %}

But is there any way to make it shorter? I've tried this:

{{ world_region.country.all.id }}

But it doesn't work. Any suggestions?

CodePudding user response:

If you are using PostgresSQL, then you can use ArrayAgg like this:

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),
) 

CodePudding user response:

i dont know why you want a list of ids in html whatever you've implemented is fine still if you want list of ids maybe you can do like this:

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 ]

then you can pass it to html as a context

  • Related