custom queryset en django admin y link sin FK

31 views
Skip to first unread message

Asinox

unread,
Sep 7, 2009, 10:57:49 PM9/7/09
to Django-es
Hola gente, tengo un escenario, y quisiera saber como puedo hacer con
Django lo siguiente:

Tengo un modelo mensajeros, y un modelo paquetes, el modelo paquetes
tiene un FK hacia el modelo mensajero, pero mensajero no tiene FK
hacia el modelo paquetes, entonces, lo que me gustaria es en listado
de mensajeros, tener una opcion que me haga un link hacia paquetes,
pero que solo me traiga todos los paquetes de el mensajero x.

Se como hacer una funcion con un link y desplegarla en list_display,
lo que no sé es como hacer la consulta e invocar el changelist_view
(la vista que te desplega todos los registro de un modelo)

Con relacion a la consulta en el admin, yo se como sobreescribir el
queryset por defecto de un modelo, entonces, como puedo yo agarrar el
ID que quiero pasar en el link , llamar la vista changelist_view (si
es asi que se llama) y mostrar los registros relacionados del modelo
paquetes.

Saludos y gracias

Diego Andrés Sanabria Martin (diegueus9)

unread,
Sep 7, 2009, 11:13:50 PM9/7/09
to djan...@googlegroups.com
2009/9/7 Asinox <asi...@gmail.com>:
>
> Hola gente, tengo un escenario, y quisiera saber como puedo hacer con
> Django lo siguiente:
>
> Tengo un modelo mensajeros, y un modelo paquetes, el modelo paquetes
> tiene un FK hacia el modelo mensajero, pero mensajero no tiene FK
> hacia el modelo paquetes, entonces, lo que me gustaria es en listado
> de mensajeros, tener una opcion que me haga un link hacia paquetes,
> pero que solo me traiga todos los paquetes de el mensajero x.

pues con el id del mensajero x puedes obtener la lista de paquetes con
algo como:

mensajero.paquete_set.objects.all()

Esto te traerá todos los paquetes del mensajero.

>
> Se como hacer una funcion con un link y desplegarla en list_display,
> lo que no sé es como hacer la consulta e invocar el changelist_view
> (la vista que te desplega todos los registro de un modelo)
>
> Con relacion a la consulta en el admin, yo se como sobreescribir el
> queryset por defecto de un modelo, entonces, como puedo yo agarrar el
> ID que quiero pasar en el link , llamar la vista changelist_view (si
> es asi que se llama) y mostrar los registros relacionados del modelo
> paquetes.

si te entendí bien puedes hacer un metodo que te haga el link por cada
mensajero con una funcion como se indica en
http://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-admin
especialmente fijate en la parte que dice:

class Person(models.Model):
first_name = models.CharField(max_length=50)
birthday = models.DateField()

def born_in_fifties(self):
return self.birthday.strftime('%Y')[:3] == '195'
born_in_fifties.boolean = True

class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'born_in_fifties')

aca es donde creo que puedes hacer una funcion como born_in_fifties
que te genere un conjunto de enlaces a los paquetes <a
href="link_a_paquete1">paquete1</a>...
para que el html se renderice en el admin no olvides usar

tufuncion.allow_tags = True

>
> Saludos y gracias
> >
>



--
Diego Andrés Sanabria
Ingeniería de Sistemas Universidad Distrital
about:me http://www.google.com/profiles/diegueus9
cel 3015290609

Sent from Bogota, DC, Colombia

Asinox

unread,
Sep 7, 2009, 11:46:24 PM9/7/09
to Django-es
Gracias gente por la respuestas, ya lo habia logrado de la forma que
dices Diego, exactamente esa info lei diego, aunque claro, para traer
las data relacionadas, solo tuve que enviar un link pasando el
parametro de busqueda (?q=%s) metido en la funcion :), donde lo que
hago es ir al modelo que posee los paquetes y hacer una busqueda :),
tricki pero creo que es funcional :)


def diligencias(obj):
return ('<a href="/admin/diligenciasd/diligenciad/?q=
%s">diligencias</a>' % obj.nombre)
diligencias.short_description = 'diligencias'
diligencias.allow_tags = True

Saludos

On Sep 7, 11:13 pm, Diego Andrés Sanabria Martin (diegueus9)
<diegue...@gmail.com> wrote:
> 2009/9/7 Asinox <asi...@gmail.com>:
>
>
>
> > Hola gente, tengo un escenario, y quisiera saber como puedo hacer con
> > Django lo siguiente:
>
> > Tengo un modelo mensajeros, y un modelo paquetes, el modelo paquetes
> > tiene un FK hacia el modelo mensajero, pero mensajero no tiene FK
> > hacia el modelo paquetes, entonces, lo que me gustaria es en listado
> > de mensajeros, tener una opcion que me haga un link hacia paquetes,
> > pero que solo me traiga todos los paquetes de el mensajero x.
>
> pues con el id del mensajero x puedes obtener la lista de paquetes con
> algo como:
>
> mensajero.paquete_set.objects.all()
>
> Esto te traerá todos los paquetes del mensajero.
>
>
>
> > Se como hacer una funcion con un link y desplegarla en list_display,
> > lo que no sé es como hacer la consulta e invocar el changelist_view
> > (la vista que te desplega todos los registro de un modelo)
>
> > Con relacion a la consulta en el admin, yo se como sobreescribir el
> > queryset por defecto de un modelo, entonces, como puedo yo agarrar el
> > ID que quiero pasar en el link , llamar la vista changelist_view (si
> > es asi que se llama) y mostrar los registros relacionados del modelo
> > paquetes.
>
> si te entendí bien puedes hacer un metodo que te haga el link por cada
> mensajero con una funcion como se indica enhttp://docs.djangoproject.com/en/dev/ref/contrib/admin/#ref-contrib-a...
> especialmente fijate en la parte que dice:
>
> class Person(models.Model):
>     first_name = models.CharField(max_length=50)
>     birthday = models.DateField()
>
>     def born_in_fifties(self):
>         return self.birthday.strftime('%Y')[:3] == '195'
>     born_in_fifties.boolean = True
>
> class PersonAdmin(admin.ModelAdmin):
>     list_display = ('name', 'born_in_fifties')
>
> aca es donde creo que puedes hacer una funcion como born_in_fifties
> que te genere un conjunto de enlaces a los paquetes <a
> href="link_a_paquete1">paquete1</a>...
> para que el html se renderice en el admin no olvides usar
>
> tufuncion.allow_tags = True
>
>
>
> > Saludos y gracias
>
> --
> Diego Andrés Sanabria
> Ingeniería de Sistemas Universidad Distrital
> about:mehttp://www.google.com/profiles/diegueus9
Reply all
Reply to author
Forward
0 new messages