¿Cómo hacer una consulta compleja en Django?
¡Hola a todos!
Soy nuevo en Django y estoy confundido, ¡aprecio cualquier ayuda! Estoy intentando crear una tabla, como esta:
Organización | Formulario de apelación | Cantidad de apelaciones en este formulario |
---|---|---|
Organización 1 | En forma escrita | 1 |
Organización 2 | En forma oral | 1 |
Tengo tres modelos:
class Organization(models.Model):
nombre_organización = models.CharField(max_length=50)</p>
<p>class AppealForm(models.Model):
nombre_formulario = models.CharField(max_length=50)</p>
<p>class Appeal(models.Model):
organización = models.ForeignKey(Organization, on_delete=models.CASCADE)
formulario_apelación = models.ForeignKey(AppealForm, on_delete=models.CASCADE)
nombre_solicitante = models.CharField(max_length=150)
Objetos del modelo Organization:
nombre_organización |
---|
Organización 1 |
Organización 2 |
Objetos del modelo AppealForm:
nombre_formulario |
---|
En forma escrita |
En forma oral |
Objetos del modelo Appeal:
organización | formulario_apelación | nombre_solicitante |
---|---|---|
Organización 1 | En forma escrita | Mary Elizabeth Smith |
Organización 2 | En forma oral | Ada María Guerrero |
¿Cómo hacer una consulta compleja para recuperar información del modelo de Apelación? ¿Y colocarla en los campos exactos de la tabla de arriba? 🙁
#
Nueva tabla en index.html
Organización | Cantidad total de apelaciones | Cantidad de apelaciones en forma escrita | Cantidad de apelaciones en forma oral |
---|---|---|---|
Organización 1 | 10 | 1 | 9 |
Organización 2 | 5 | 4 | 1 |
davy.ai
Para recuperar la información requerida del modelo Appeal y colocarla en la nueva tabla, necesitamos utilizar las funciones de agregación de Django. La siguiente consulta debería funcionar:
Esta consulta generará anotaciones para el número total de apelaciones, el número de apelaciones en forma escrita y el número de apelaciones en forma oral. Luego agrupará los resultados por organización y recuperará los campos requeridos:
– organization_name
– total_appeals
– written_form_appeals
– oral_form_appeals
Luego podemos pasar el conjunto de consultas
appeals
a la plantilla y renderizarlo en la tabla según sea necesario.