Django queryset域上的数学
我有以下Django型号:Django queryset域上的数学,django,django-models,Django,Django Models,我有以下Django型号: class Accounts(models.Model): account_code = models.CharField(max_length=12) account_name = models.CharField(max_length=50) value = models.DecimalField(max_digits=10, decimal_places=2) 查询数据库时,我希望返回的查询集的字段值除以1000。 在查询数据库时,如何
class Accounts(models.Model):
account_code = models.CharField(max_length=12)
account_name = models.CharField(max_length=50)
value = models.DecimalField(max_digits=10, decimal_places=2)
查询数据库时,我希望返回的查询集的字段值
除以1000。
在查询数据库时,如何对模型字段进行这种计算?我不确定在查询集中是否可以这样做,即使使用注释(我实际上非常确定这是不可能的)。我的第一个答案是空间效率低下,因为您必须以两种形式存储相同的值,而我的第二个答案是我将要做的,并使用前端处理除法: 回答一:第二个值字段 在您的模型中,您可以定义一个字段
格式化的_值
,该字段也是一个小数,但有6位小数(以说明除以1000的情况)。在save
功能中,或在pre\u save
信号中,您可以将值
除以1000,并将其保存在格式化值
字段中
这个答案是次优的,因为您将浪费数据库中的空间。我认为更好的答案是:
答案二:查看或前端处理
在我的项目中,我经常需要操纵数据库中的数字来输出某种分析工具。我将原始数字返回到前端(只要它们不敏感),然后使用Javascript在前端处理数学运算。这将计算负担传递给客户机,并简化了Django。这样做的好处是,您可以使前端具有交互性,并允许用户更改影响他们正在查看的分析的值
我觉得你在找更简单的东西。如果您有一个视图总是需要返回
值/1000
,您可以在视图中处理此问题,方法是使用Accounts.objects.all()
获取帐户列表,然后循环遍历每个帐户并将值除以1000。我不确定这在查询集中是否确实可行,甚至使用注释(实际上我非常确定这是不可能的)。我的第一个答案是空间效率低下,因为您必须以两种形式存储相同的值,而我的第二个答案是我将要做的,并使用前端处理除法:
回答一:第二个值字段
在您的模型中,您可以定义一个字段格式化的_值
,该字段也是一个小数,但有6位小数(以说明除以1000的情况)。在save
功能中,或在pre\u save
信号中,您可以将值
除以1000,并将其保存在格式化值
字段中
这个答案是次优的,因为您将浪费数据库中的空间。我认为更好的答案是:
答案二:查看或前端处理
在我的项目中,我经常需要操纵数据库中的数字来输出某种分析工具。我将原始数字返回到前端(只要它们不敏感),然后使用Javascript在前端处理数学运算。这将计算负担传递给客户机,并简化了Django。这样做的好处是,您可以使前端具有交互性,并允许用户更改影响他们正在查看的分析的值
我觉得你在找更简单的东西。如果您的视图总是需要返回值/1000
,您可以通过使用Accounts.objects.all()获取帐户列表来处理此问题
然后循环遍历每个属性并将值
除以1000。您可以使用属性
装饰器在模型上定义属性。此属性不会在数据库中定义,但在查询每个对象时都可以访问
例如:
class Accounts(models.Model):
account_code = models.CharField(max_length=12)
account_name = models.CharField(max_length=50)
value = models.DecimalField(max_digits=10, decimal_places=2)
@property
def divided_value(self):
return self.value / 1000
然后,您可以将每个帐户实例上的分割值
作为普通属性访问,例如帐户。分割值
您可以使用属性
装饰器在模型上定义属性。此属性不会在数据库中定义,但在查询每个对象时都可以访问
例如:
class Accounts(models.Model):
account_code = models.CharField(max_length=12)
account_name = models.CharField(max_length=50)
value = models.DecimalField(max_digits=10, decimal_places=2)
@property
def divided_value(self):
return self.value / 1000
然后,您可以将每个帐户实例上的divided_值
作为普通属性访问,例如同一属性中的account.divided_值
?因为首先,这不再是一个整数
,而且它会让一切变得更加混乱。如果需要存储值,可以使用十进制字段
,该字段根据定义的精度存储数字。编辑以更改为十进制字段。谢谢当我执行Accounts.objects.all()
Queryset中的所有values
条目将被除以1000。您将如何使用这个除以的值?在同一属性中?因为首先,这不再是一个整数
,而且它会让一切变得更加混乱。如果需要存储值,可以使用十进制字段
,该字段根据定义的精度存储数字。编辑以更改为十进制字段。谢谢当我做Accounts.objects.all()
Queryset中的所有values
条目将被除以1000。你将如何使用这个除以的值?我将尝试你上一段中的方法。我想这行得通。我试试你上一段的方法。我想它会有用的。