Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
¿Hay alguna forma de hacer que esta consulta de filtro sea más pequeña?

Estas son mis tablas:

 class Employee(models.Model): name = models.CharField() class Job(models.Model): title = models.CharField() class Employee_Job(models.Model): employee_f = models.ForeignKey(Employee, on_delete=models.CASCADE) job_f = models.ForeignKey(Job, on_delete=models.CASCADE) class Salary(models.Model): employee_job_f = models.ForeignKey(Employee_Job, on_delete=models.CASCADE) full_name = models.CharField() @property def name(self): return Employee.objects.filter(id = ( Employee_Job.objects.filter(id = self.employee_job_f_id ).first().employee_f )).first().name

Esta consulta me parece muy larga, pensé que select_related() debería ayudar con esto, pero sigue claves externas y devuelve TODOS los resultados, no el resultado que está relacionado con ESTA instancia de Salario.

Seguimiento de la respuesta de Willem Van Onsem:

Agregué un par de filas más a mis tablas y estoy usando esta consulta en la función guardar () y de repente recibo este error:

get() returned more than one , lo cual es un error popular.

También hice la consulta un poco más pequeña:

 def save(self, *args, **kwargs): self.full_name = Employee_Job.objects.get( salary=self ).name + " 's salary" super(salary, self).save(*args, **kwargs)

Revisé para ver qué consulta SQL está ejecutando Django detrás de escena y encontré al culpable:

 SELECT [blog_employee_job].[id], [blog_employee_job].[employee_f_id], [blog_employee_job].[job_f_id] FROM [blog_employee_job] LEFT OUTER JOIN [blog_salary] ON ([blog_employee_job].[id] = [blog_salary].[employee_job_f_id]) WHERE [blog_salary].[id] IS NULL

Creo que WHERE [blog_salary].[id] IS NULL es el culpable y no entiendo por qué y no sé cómo arreglar esto, busqué mucho y revisé mucho Docs también.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Sí, puedes filtrar con

 @property def name(self): Employee.objects.get( employee_job__salary=self ).name

Esto recuperará al empleado que tiene un Employee_Job que está relacionado con self como salario.


Nota : los modelos en Django están escritos en PascalCase , no en snake_case , por lo que es posible que desee cambiar el nombre del modelo de Employee_Job a EmployeeJob .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda