Есть ли способ сделать этот запрос фильтра меньше.

Вот мои таблицы:

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)

@property
def name(self):
return Employee.objects.filter(id = (
    Employee_Job.objects.filter(id = self.employee_job_f_id ).first().employee_f 
)).first().name

Этот запрос кажется мне очень длинным, я думал, что select_related() должен помочь с этим, но он следует за внешними ключами и возвращает ВСЕ результаты, а не те, которые относятся к ЭТОМУ экземпляру Salary.

Да, вы можете фильтровать с помощью

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

Это позволит получить сотрудника, у которого Employee_Job связан с self как зарплата.


Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из Employee_Job в EmployeeJob.

Вернуться на верх