【发布时间】:2021-09-08 21:48:09
【问题描述】:
我用两种方法创建了一个 djngo 模型来做一些类似的事情:
class Scaling(models.Model):
id = models.AutoField(primary_key=True)
description = models.TextField(default='', verbose_name="Description", null=True, blank=True)
input_low = models.FloatField()
input_high = models.FloatField()
output_low = models.FloatField()
output_high = models.FloatField()
limit_input = models.BooleanField()
def __str__(self):
if self.description:
return self.description
else:
return str(self.id) + '_[' + str(self.input_low) + ':' + \
str(self.input_high) + '] -> [' + str(self.output_low) + ':' \
+ str(self.output_low) + ']'
def scale_value(self, input_value):
input_value = float(input_value)
if self.limit_input:
input_value = max(min(input_value, self.input_high), self.input_low)
norm_value = (input_value - self.input_low) / (self.input_high - self.input_low)
return norm_value * (self.output_high - self.output_low) + self.output_low
def scale_output_value(self, input_value):
input_value = float(input_value)
norm_value = (input_value - self.output_low) / (self.output_high - self.output_low)
return norm_value * (self.input_high - self.input_low) + self.input_low
好的,现在我将在复杂的 django 查询中使用我的实例方法计算作为普通字段,例如:
var_results = VarsResults.objects.filter(
id_res__read_date__range=(start_d, end_d),
id_res__proj_code=pr_code,
var_id__is_quarterly=False
).select_related(
"id_res",
"var_id",
"scaling_id"
).values(
"id_res__read_date",
"id_res__unit_id",
"id_res__device_id",
"id_res__proj_code",
"var_val",
<scale_output_value(scaling instance_id)>
)
如何使用模型方法返回值作为查询集中的列?
提前非常感谢 曼努埃尔
【问题讨论】:
-
这能回答你的问题吗? Django, query filtering from model method
标签: django django-models django-orm