Есть ли способ сделать этот запрос фильтра меньше.
Вот мои таблицы:
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
.