[Django]-Django: show a ManyToManyField in a template?

137👍

Use place.area.all in the template
http://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships

{% for place in places %}
    Name: {{ place.name }}<br/>
    Area: <br/>{% for area in place.area.all %}{{ area }}<br/>{% endfor %}
{% endfor %}

34👍

You can use the existing join template tag.

https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#join

Here’s the code

{% for place in places %}
    Name: {{ place.name }}, Area: {{ place.area.all|join:", " }}
{% endfor %}

9👍

What does your view code look like?
Here’s one way you can return the related models:

from myapp.models import Area, Place

def detail(request, place_id):
    place = Place.objects.get(pk=place_id)
    areas = place.area.all()

    return render_to_response('detail.html', {
        "place": place,
        "areas": areas,
    })

This example is just for illustration; you’d want to include error-handling code.
Your template might look something like this:

<h3>{{ place }}</h3>

{% if areas %}
  <ul>
  {% for area in areas %}
    <li>{{ area.name }}</li>
  {% endfor %}
  </ul>
{% endif %}

5👍

For show only ManyToMany field:

{% for place in places.area.all %}
    {{ place.name }}
{% endfor %}
👤Darwin

Leave a comment