Python - Como obtener campos de una tabla relacionada en Django

 
Vista:

Como obtener campos de una tabla relacionada en Django

Publicado por JoAnCa (1 intervención) el 19/10/2020 18:00:01
Hola a todos
Necesito mostrar en una tabla un listado de clientes que pertenecen a un municipio y a un sector
Municipios y Sectores son dos tablas relacionadas con clientes

Obteniendo los datos de la tabla clientes, me muestra los id de municipio y sector, y lo que quiero es que me muestre el nombre del municipio y el nombre del sector, obteniendolo a traves de la llave foreingkey (como lo he hecho con yii2)

En Django como se puede hacer esto?
He visto que el panel de administración de django lo hace, así que debe haber una forma de hacerlo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como obtener campos de una tabla relacionada en Django

Publicado por algoritmo (245 intervenciones) el 20/10/2020 09:47:01
Hola

Yo trabajo con una versión antigua de Django, (1.3.0); y es tan simple como establecer los campos en la variable 'fields' de la vista.

No creo que las nuevas versiones hayan cambiado ésto.

Ejemplo: fields = {'nombre', 'apellidos', 'domicilio'.......}

Para hacer referencia a un campo de una tabla asociada, se utiliza los caracteres __, ejemplo:

Tengo las tablas: Cliente, Municipio, Sector
La tabla Cliente, tiene los campos foreignkey: municipio, y sector
La tabla Municipio tiene el campo 'nombre'
La tabla Sector tiene el campo 'nombre'.
Sería:

fields = {'municipio__nombre', 'sector__nombre'}

Espero que te sirva :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como obtener campos de una tabla relacionada en Django

Publicado por JoAnCa (12 intervenciones) el 20/10/2020 16:32:32
Muchas gracias por tu respuesta

Declare la lista de campos como me indicas, pero para la serializacion del JSON no me funciona, me sigue tomando el idmunicipio, parece que serialize no los toma en cuenta, o quizas yo no lo estoy haciendo de la forma correcta

Encontre una solucion para hacerlo con la opcion [ use_natural_foreign_keys=True ] en el serialize,

1
data = serialize('json', self.get_queryset(), use_natural_foreign_keys=True)

y en el modelo agregando

1
2
def natural_key(self):
        return self.municipio

y funciona bien, pero demasiado lento con 627 registros (entre 2 y 3 seg), de esta forma cuando hayan mas registros no serviria

Mi problema esta en crear el JSON con las foreingkey para que me tome el campo relacionado

En los casos de los datos directos (sin JSON), no hay problemas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como obtener campos de una tabla relacionada en Django

Publicado por algoritmo (245 intervenciones) el 21/10/2020 09:11:54
Hola

Lamento no poder ayudarte en eso. Yo nunca he necesitado serialize para presentar datos en una vista de django.
Ni siquiera se cómo se utiliza, ni que aporta. Trabajo con muchos miles de registros y se presentan en pantalla paginados a una velocidad aceptable, incluso cuando los campos que ofrecen son calculados y ese cálculo no es precisamente rápido.

Sin embargo, desde mi desconocimiento del tema, me llama la atención un par de cosas:
- No utilizas 'fields' dentro de los argumentos, y eso puede provocar que gestione todos los campos. Quizás sólo te interese que gestione algunos campos, no todos. Mira https://docs.djangoproject.com/en/3.1/topics/serialization/
- Si defines natural_key como self.municipio te lanzará el unicode de la tabla. Yo pondría: self.municipio.nombre

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como obtener campos de una tabla relacionada en Django

Publicado por JoAnCa (12 intervenciones) el 21/10/2020 17:54:33
Pues lo que quiero hacer es enviar un JSON para llenar un Datatables mediante Ajax

Cuando me dices que muestras miles de registros paginados a velocidad aceptable, ¿usas Datatables?

De que forma lo haces? quizas yo desista del JSON y Ajax y cambie la forma de hacerlo, en realidad busco velocidad al cargar los datos, pero me da igual la forma de hacerlo, siempre que no demore tanto

Me gustaria hacerlo con Datatables por sus funcionalidades incorporadas de paginacion, ordenamiento, etc., pero si tienes otra alternativa parecida, tambien seria valido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de algoritmo
Val: 819
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como obtener campos de una tabla relacionada en Django

Publicado por algoritmo (245 intervenciones) el 21/10/2020 18:38:23
Hola

No, no uso datatables. Ni los conozco, creo que es una extensión de jquery que gestiona tablas.
Sin conocer el tema, intuyo que mandarle al navegador la tabla completa para que jquery la gestione, es un disparate. ¡Puedo estar equivocado!, es una intuición. Pero entiendo que el volumen de datos en el tráfico puede ser tremendo.

Hasta lo poco que conozco, la esencia de Django está en la gestión de las vistas como clases heredades de modelAdmin:

from django.contrib import admin
admin.ModelAdmin

Este ModelAdmin controla paginación, y lo bueno es que selecciona y envía al navegador una pequeña cantidad de información, por lo que la presentación es muy rápida.

Poco más te puedo contar, si te interesa, te animo a que investigues sobre la documentación de Django, y los infinitos ejemplos que hay por ahí.

Sin querer desanimarte, a mí me costó meses poner algo en marcha, y lo malo es que no me saques de lo poco que sé porque me pierdo :(

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como obtener campos de una tabla relacionada en Django

Publicado por JoAnCa (12 intervenciones) el 21/10/2020 21:52:03
Muchas gracias por tu ayuda

Estudiare mas a fondo el modelAdmin para ver que provecho puedo sacarle, y django en general, ya que me estoy iniciando con este framework

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar