【问题标题】:Derived (Calculated) Field From Another Model从另一个模型派生(计算)字段
【发布时间】:2021-12-31 12:16:52
【问题描述】:

我开始了一个简单的入门级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())'

如何在 Python-Django 代码中实现上述 SELECT 代码?

相关问题:

Derived attribute in Django model

How to add a calculated field to a Django model

Django getting field names from different models

相关的 SQL-Server 问题:

How to create derived attribute?

【问题讨论】:

标签: python sql-server django


【解决方案1】:

你可以使用@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=self.person_id_id).first(). job_income_in_usd * 0.89

顺便说一句,我认为在最后用_id 命名您的ForeignKeys 不是一个好主意。

【讨论】:

  • 花了我一段时间才开始了解它,谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 2016-03-29
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多