Производное (расчетное) поле из другой модели
Я начал простой проект django начального уровня для практики, он использует sql-server в качестве базы данных (mssql-django).
Как я могу иметь производный атрибут (вычисляемый столбец) из другой таблицы в качестве поля в моей модели?
Допустим, у меня есть такая модель
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=50)
birth_date = models.DateField()
class JobTitles(models.Model):
job_title = CharField(max_length=20)
class Jobs(models.Model):
job_id = models.OneToOneField(
JobTitles,
on_delete=models.CASCADE,
)
person_id = models.ForeignKey(
Person,
on_delete=models.CASCADE,
)
job_income_in_usd = models.IntegerField()
class Salary(models.Model):
person_id = models.ForeignKey(
Person,
on_delete=models.CASCADE,
)
name = 'SELECT name FROM Person WHERE Salary.person_id = Person.id'
income_in_euro = 'SELECT job_income_in_usd * 0.89 FROM Jobs INNER JOIN Salary ON Salary.person_id=Jobs.person_id'
age = 'SELECT datediff(year, (SELECT birth_date FROM Person WHERE Salary.person_id=Person.id), getdate())'
Как мне реализовать приведенные выше коды SELECT в кодах Python-Django?
Связанные вопросы:
Производный атрибут в модели Django
Как добавить вычисляемое поле в модель Django
Django получение имен полей из разных моделей
Соответствующий вопрос по SQL-Server:
Как создать производный атрибут?
Для этого можно использовать декоратор @property
, вот пример:
class Salary(models.Model):
person_id = models.ForeignKey(
Person,
on_delete=models.CASCADE,
)
@property
def name(self):
return self.person_id.name if self.person_id else None
@property
def income_in_euro(self):
if not self.person_id:
return
return Jobs.objects.filter(person_id_id=sellf.person_id_id).first(). job_income_in_usd * 0.89
btw я не думаю, что это хорошая идея называть ваши ForeignKey
s с _id
в конце.