ManyToMany en template

219 views
Skip to first unread message

refreegrata

unread,
Dec 14, 2010, 12:34:28 PM12/14/10
to Django-es
Hola lista. Tengo una duda.Existe alguna manera de encontrar la
coincidencia de un ManytoMany field en una plantilla?
Por ejemplo con un modelo como este
---------------------------------------------
class Ghi(models.model):
dato = models.IntegerField(unique =True)

class Def(models.Model):
ghis = models.ForeignKeyField(Ghi)

class Abc(models.Model):
defs = models.ManyToManyField(Def)

y desde la vista devuelvo algo como Abc.objects.all()

Existe alguna manera de identificar en la plantilla algo como
Abc.ghis.dato == 1?
evidentemente si hago un for sobre defs y dentro de cada ciclo del
for pregunto por el valor de dato funciona, pero no se si existe
alguna manera más directa y limpia de hacerlo.

Saludos, gracias por leer

Celso Gonzalez

unread,
Dec 15, 2010, 8:30:01 AM12/15/10
to djan...@googlegroups.com
2010/12/14 refreegrata <refre...@yahoo.com>:

Hola

No tengo claro que es lo que quieres.
Si se trata de filtrar algo en el queryset tienes la opción de los
select_related
http://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

Si se trata de sacar un valor a través de la relación tienes la opcion _set
http://docs.djangoproject.com/en/dev/ref/models/relations/

Espero que te sirva

Un saludo

--
Celso González
http://mitago.net

refreegrata

unread,
Dec 15, 2010, 11:49:42 AM12/15/10
to Django-es
OK, gracias por responder. Algo así quiero hacer, pero en la
plantilla. Quería saber si se podía hacer algo así en la plantilla sin
tener que crear un tag personalizado. Si no es posible voy a tener que
evaluar la consulta en la vista, cada registro en forma de
diccionario más los campos adicionales e irlos agregando a un lista y
reotnar la lista.

Saludos.

Pau Cervera

unread,
Dec 15, 2010, 12:08:06 PM12/15/10
to djan...@googlegroups.com

2010/12/15 refreegrata <refre...@yahoo.com>

¿Quizá con un inclusion tag [1] al que le pases una instáncia del Abc que esté en el context?

[1]<http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags>

-----
Pau

Python..., what else?

Andrés gutiérrez

unread,
Dec 14, 2010, 12:42:19 PM12/14/10
to djan...@googlegroups.com
El 14 de diciembre de 2010 18:34, refreegrata <refre...@yahoo.com> escribió:
Hola lista. Tengo una duda.Existe alguna manera de encontrar la
coincidencia de un ManytoMany field en una plantilla?
Por ejemplo con un modelo como este
---------------------------------------------
class Ghi(models.model):
      dato = models.IntegerField(unique =True)

class Def(models.Model):
       ghis = models.ForeignKeyField(Ghi)

class Abc(models.Model):
       defs = models.ManyToManyField(Def)

Me la voy a jugar:

En la vista podrías hacer algo asi:

dato1 = Abc.def_set.filter(ghi__dato=1)

Y devolver dato1. Ahi tienes un objeto Abc cuyo campo dato ==1

y desde la vista devuelvo algo como Abc.objects.all()

Existe alguna manera de identificar en la plantilla algo como
Abc.ghis.dato == 1?
evidentemente si hago un for  sobre defs y dentro de cada ciclo del
for pregunto por el valor de dato funciona, pero no se si existe
alguna manera más directa y limpia de hacerlo.

Saludos, gracias por leer

--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
 Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
 Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
 Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.

refreegrata

unread,
Dec 15, 2010, 8:19:04 PM12/15/10
to Django-es
Voy a hacer un filtro y devolver una lista en la vista.

> dato1 = Abc.def_set.filter(ghi__dato=1)
>
> Y devolver dato1. Ahi tienes un objeto Abc cuyo campo dato ==1

En todo caso eso no me sirve(bueno, es que no me expliqué del todo
bien), pero yo necesito que devuelva todos los Abc, ordenados por id e
imprimirlos en la plantilla en un table, solo que en una de las celdas
de cada fila preguntar si tiene el dato == 1 e imprimir una marca de
existencia, de lo contrario una marca de inexistencia. Por eso lo que
propones no me sirve, ya que no devolvería todos los Abc, solo los con
def__ghi__dato = a 1.
Saludos.

Roylan Suarez Reyes

unread,
Dec 21, 2010, 10:38:58 AM12/21/10
to djan...@googlegroups.com
Hola Colegas

A parte de django-registration y django-profiles alguien conoce otra app
para poner en un proyecto en produccion?

salu2
Roylan

Reply all
Reply to author
Forward
0 new messages