Python django如何使用模型的选项DecimalField
我需要有一个字段来存储范围为(-20到20,步骤为0.25)的值,并且这些值应该显示为(1.50,3.00,5.25),因此我认为我应该使用十进制而不是浮点数,在一些搜索之后,我使用此函数生成所需的范围:Python django如何使用模型的选项DecimalField,python,django,Python,Django,我需要有一个字段来存储范围为(-20到20,步骤为0.25)的值,并且这些值应该显示为(1.50,3.00,5.25),因此我认为我应该使用十进制而不是浮点数,在一些搜索之后,我使用此函数生成所需的范围: def decimal_range(A, B, X): """ function to generate decimal floating numbers from start(A), to end(B), by step(X) """
def decimal_range(A, B, X):
"""
function to generate decimal floating numbers from start(A), to end(B), by step(X)
"""
getcontext().prec = 5
while A < B:
yield float(A)
A += Decimal(X)
结果元组是
(-20.0,-20.00'),(-19.75,-19.75'),(-19.5,-19.50'),(-19.25,
-19.25’,(-19.0,-19.00’,…)
模型字段是
arrs = models.DecimalField(max_digits=4, decimal_places=2, choices=S_CHOICES, null=True, blank=True, default=None)
当查看db.sqlite3文件时,我看到一些不同的值,如(-20而不是-20.0)
此外,在pythonshell中检查字段值时,类似于Decimal('15.00')、Decimal('4.50')
最后,如果我提交了一个带有此字段的表单,其值为7.50或7.00,则会正确保存和检索,但当尝试更新此表单时,字段值将为空,但如果值为1.75或-13.75,则不会出现任何问题
有人请告诉我……我已经找到了正确的方式来选择这些型号。经过一些尝试和错误,我认为这可能会帮助其他人 分配给十进制字段的方法是通过decimal.decimal对象或字符串,而不是Python浮点 因此,我将选项元组调整为:
from decimal import Decimal
S_CHOICES = tuple(tuple([Decimal(f"{i:.2f}"), f"{i:.2f}"]) for i in decimal_range(-20, 20.25, 0.25))
from decimal import Decimal
S_CHOICES = tuple(tuple([Decimal(f"{i:.2f}"), f"{i:.2f}"]) for i in decimal_range(-20, 20.25, 0.25))