Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django如何使用模型的选项DecimalField_Python_Django - Fatal编程技术网

Python django如何使用模型的选项DecimalField

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) """

我需要有一个字段来存储范围为(-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)
"""
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))