Django:Console在CharField定义的字段上返回“值必须是十进制数”?

2024-04-25 18:05:11 发布

您现在位置:Python中文网/ 问答频道 /正文

对。。。。。所以我很困惑。此错误所基于的代码函数是,用户提交了一个包含指定数据的csv文件。Django将处理数据处理并将提交的数据添加到MySQL数据库中。在调试一些处理错误,并确保我定义的所有列表与csv文件头顺序匹配的过程中,Django的模型.保存()功能不起作用。所以我打开了异常并将其打印到控制台,在那里我得到以下错误:

编辑:将此值更新为实际错误结果值:

[u"'F1216-07a' value must be a decimal number."]

其中“value1”是要输入CharField定义字段的数据值。都是我的型号.py文件定义为string,MySQL数据库表通过PHPMyAdmin将此字段定义为char(N)。我猜这是作为参考的字段的模型定义:

x_version = models.CharField(choices=X_VERSION_CHOICES, max_length=32, blank=True, verbose_name='By X Field Version')

以下是选择的示例定义:

X_VERSION_CHOICES = (
    ('value1', 'value1'),
    ('value2', 'value2'),
)

此字段的值必须是预定义的字符串选项之一,因此没有任何选项可以将此值更改为十进制值。当定义的类型正确时,为什么Django会显示这个错误?会不会是因为这些常量是如何定义的?你知道吗

编辑:我认为这是一个不言自明的问题,但这里有一个代码示例模型。保存()方法在处崩溃。你知道吗

try:
     ....

     # Value in this reconciliation_required db field must be set as
     # "1" for true, which in test file it is.
     if contracts[line['contract_no']].reconciliation_required:

            # pass SampleDesignParameters the parameter dictionary and 
            # create line_parameters
            line_parameters = SampleDesignParameters(**para_dict)
            line_parameters.contract = contracts[line['contract_no']]
            line_parameters.name = 'Auto-Created'
            line_parameters.save()
            line_sample.parameters = line_parameters

 except Exception as e:
     print e
     # .... more code that generates warnings here

其中para_dict是一个字典,其中键作为数据库命名字段,其值是用户为该字段输入的数据。我已经在控制台上打印了dict,所以对于键和数据字段,它们都会相应地排列起来。至于模型本身,它的。。。你知道吗

class SampleDesignParameters(DesignParameters):
    parent_template = models.ForeignKey('DesignParameters', related_name='parent', blank=True, null=True)

...

class DesignParameters(models.Model):
    id = models.AutoField(primary_key=True)
    ....

    # This field that Django has errors saving on:
    f1216_version = models.CharField(choices=F1216_VERSION_CHOICES, max_length=32, blank=True, verbose_name='BY ASTM F1216 VERSION')

....

以及该字段的适当常数,其格式与虚拟字段的格式基本相同:

F1216_VERSION_CHOICES = (
    ('F1216-07a', 'F1216-07a'),
    ('F1216-09', 'F1216-09'),
)

Tags: 文件数据djangoname模型数据库true定义
1条回答
网友
1楼 · 发布于 2024-04-25 18:05:11

最可能的解释是,不知何故,该值被保存到模型的错误字段中。你能捕捉错误并检查值吗?或者可能有一个可能的字段,也可能是CSV中缺少值的坏行,所以它们被移位了。你知道吗

相关问题 更多 >