python django 中的计算字段
Calculated fieds in python django
我的数据库中有一个 Table,其中包含字段 id
、body_temp
和 status
,其定义如下 class:
class Temperature(models.Model):
...
id = models.AutoField(primary_key=True)
body_temp = models.DecimalField(max_digits=3, decimal_places=1)
status = models.CharField(max_length=20)
...
字段 body_temp
将通过表单填充,另一方面,我希望字段 status
根据字段 [=13] 中输入的值存储字符串=].
如果字段body_temp
中输入的温度值小于38,我希望字段status
存储一个字符串normal
。
但是,如果字段body_temp
中输入的温度值大于或等于38,我希望字段status
存储一个字符串suspect
。
我该怎么做?
您可以将您的状态字段设置为 属性,然后它会被即时计算
class Temperature(models.Model):
...
id = models.AutoField(primary_key=True)
body_temp = models.DecimalField(max_digits=3, decimal_places=1)
@property
def status(self):
if self.body_temp < 38:
return 'normal'
else:
return 'suspect'
或者您可以 override save() 方法在任何编辑中计算此字段并将结果存储在数据库中
class Temperature(models.Model):
...
id = models.AutoField(primary_key=True)
body_temp = models.DecimalField(max_digits=3, decimal_places=1)
status = models.CharField(max_length=20)
...
def save(self, *args, **kwargs):
if self.body_temp < 38:
self.status = 'normal'
else:
self.status = 'suspect'
super().save(*args, **kwargs)
我的数据库中有一个 Table,其中包含字段 id
、body_temp
和 status
,其定义如下 class:
class Temperature(models.Model):
...
id = models.AutoField(primary_key=True)
body_temp = models.DecimalField(max_digits=3, decimal_places=1)
status = models.CharField(max_length=20)
...
字段 body_temp
将通过表单填充,另一方面,我希望字段 status
根据字段 [=13] 中输入的值存储字符串=].
如果字段body_temp
中输入的温度值小于38,我希望字段status
存储一个字符串normal
。
但是,如果字段body_temp
中输入的温度值大于或等于38,我希望字段status
存储一个字符串suspect
。
我该怎么做?
您可以将您的状态字段设置为 属性,然后它会被即时计算
class Temperature(models.Model):
...
id = models.AutoField(primary_key=True)
body_temp = models.DecimalField(max_digits=3, decimal_places=1)
@property
def status(self):
if self.body_temp < 38:
return 'normal'
else:
return 'suspect'
或者您可以 override save() 方法在任何编辑中计算此字段并将结果存储在数据库中
class Temperature(models.Model):
...
id = models.AutoField(primary_key=True)
body_temp = models.DecimalField(max_digits=3, decimal_places=1)
status = models.CharField(max_length=20)
...
def save(self, *args, **kwargs):
if self.body_temp < 38:
self.status = 'normal'
else:
self.status = 'suspect'
super().save(*args, **kwargs)