2010-11-24 8 views
21

Tengo estos modelos en mi proyecto Django:Django: muestra ManyToManyField en una plantilla?

class Area(models.Model): 
    name = models.CharField(max_length=100, primary_key=True) 
    def __unicode__(self): 
     return self.name 
class Place(models.Model): 
    id = models.IntegerField(primary_key=True) 
    name = models.CharField(max_length=100, primary_key=True) 
    area = models.ManyToManyField(Area,related_name='area') 

¿Cómo puedo mostrar nombre de área de la plaza (s) en mi plantilla? Actualmente tengo:

{% for place in places %} 
    Name: {{ place.name }}, Area: {{ place.area}} 
{% endfor %} 

lo que da:

Area: <django.db.models.fields.related.ManyRelatedManager object at 0x10435a3d0> 

Y {{ place.area}} es sólo en blanco. ¿Alguien puede ayudar?

Respuesta

2

¿Cómo se ve el código de la vista?
Aquí es una manera de que pueda volver a los modelos relacionados:

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

Este ejemplo es sólo para ilustración; querrías incluir un código de manejo de errores.
La plantilla podría ser algo como esto:

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

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

Gracias! Mi problema es que tengo otra página con muchos lugares, por lo que no puedo calcular fácilmente las áreas por separado en la vista para cada una (pregunta actualizada). ¿Alguna idea sobre qué hacer para esto? – AP257

Cuestiones relacionadas