Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

170
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!