Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Como obtener campos de una tabla relacionada en Django
#1
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? Undecided
He visto que el panel de administración de django lo hace, así que debe haber una forma de hacerlo
Responder
#2
Logre hacerlo agregando en el modelo la siguiente función:


Cita:    def natural_key(self):
        return self.nombre_campo_a_mostrar

Pero ahora los datos se cargan muy lento, y es en el proceso de serializar el JSON


Habrá alguna forma mas rápida de hacerlo?
Responder
#3
Hola.

No creo que debas usar una natural key para este caso. ¿Definiste el método __str__() en tus modelos Municipio y Sector? Podés ver un ejemplo acá: https://developer.mozilla.org/es/docs/Le...ngo/Models.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#4
(20-10-2020, 03:19 PM)Francisco escribió: Hola.

No creo que debas usar una natural key para este caso. ¿Definiste el método __str__() en tus modelos Municipio y Sector? Podés ver un ejemplo acá: https://developer.mozilla.org/es/docs/Le...ngo/Models.

Saludos

Gracias por tu respuesta

Pues si tengo definidos los métodos __str__ en todos los modelos, no se porque no me los pone en el JSON

Si no crees que deba usar natural key, quizás es que deba armar el JSON de otra forma

Para crear el JSON lo hago así, segun un tutorial que encontré:


Cita:def get(self, request, *args, **kwargs):
        if request.is_ajax():
            data = serialize('json'self.get_queryset(), use_natural_foreign_keys=True)
            return HttpResponse(data, 'application/json')
        else:
            return redirect('clientes:listado')

Podrias indicarme otra forma de obtener el JSON ?
Responder
#5
Hola.

Esa forma está bien. Sin ver el código, lo que intentaría es simplificar el QuerySet para que no tarde tanto en serializar (capaz hay cosas que estás trayendo de la base de datos y no necesitás serializar), o bien no utilizar las natural keys (si ves que esto evidentemente ralentiza mucho el proceso) y obtener las representaciones de tus municipios y sectores con una consulta propia. O sea, en vez de pasarle directamente un QS a serialize(), deberías crear tu estructura (seguramente una lista con diccionarios) antes de llamar a serialize().

Recordá que podés usar django-debug-toolbar para ver las consultas que se están ejecutando y así averiguar qué es lo que ralentiza el proceso.

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)