我在Django中创建了一个模型,从0到14有多个数字选择,步骤为0.1。我可以在管理面板中看到它们,但只能选择数字乘以0.5。
我的模特:
class SoilPh(models.Model):
SOIL_PH_CHOICES = (
(i / 10, str(i / 10)) for i in range(MAX_PH_LEVEL * 10 + 1)
)
name = models.DecimalField(
max_digits=2,
decimal_places=1,
validators=[
MinValueValidator(0, '0'),
MaxValueValidator(MAX_PH_LEVEL, f'{MAX_PH_LEVEL}')
],
choices=SOIL_PH_CHOICES,
unique=True,
null=True,
)
class Deciduous(Plant):
soil_ph = models.ManyToManyField(
SoilPh,
related_name='soil_ph',
)
错误:Select a valid choice. 0.3 is not one of the available choices.
我错在哪里?
2条答案
按热度按时间qlvxas9a1#
SOIL_PH_CHOICES
是生成器表达式。您要将其分配给
choices
如果你想看到
SOIL_PH_CHOICES
中的值,我们可以使用列表解析,把MAX_PH_LEVEL
的值从0改为14。当
MAX_PH_LEVEL = 0
:当
MAX_PH_LEVEL = 14
:现在,您可以比较和检查您的值。
mgdq6dx12#
我将
DecimalField
更改为FloatField
,现在它可以工作了。但是谁能解释
DecimalField
到底有什么问题呢?