对.....所以我对此感到困惑。该错误所基于的代码功能是用户提交包含指定数据的csv文件。 Django将处理数据处理并将提交的数据添加到MySQL数据库。在调试一些处理错误并确保我所有定义的列表与csv文件标题顺序以及所有内容匹配时,Django的Model.save()函数将不起作用。因此,我打开了异常并打印到控制台,在此我将其作为错误:
编辑:将此值更新为实际错误结果值:
[u"'F1216-07a' value must be a decimal number."]
其中“ value1”是要输入到CharField定义的字段中的数据值。我的models.py文件都定义为字符串,而通过PHPMyAdmin的MySQL数据库表将此字段定义为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'),
)
此字段的值必须是预定义的字符串选择之一,因此没有任何选择将此值更改为Decimal值。当定义的类型正确时,为什么Django会显示此错误?是因为选择常量的定义方式?
编辑:我认为这是不言自明的问题,但这是model.Save()方法崩溃的位置的代码示例。
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是一个字典,其中的键作为数据库的命名字段,其值是用户在该字段中输入的数据。我已经在控制台上打印了字典,因此对于键和数据字段,它们都相应地排列了起来。至于模型本身...
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'),
)
答案 0 :(得分:0)
最可能的解释是,该值以某种方式保存在模型的错误字段中。您可以捕获错误并检查值吗?或者,也许是一个可能的字段,并且CSV中可能有一个错误的行,缺少一个值,因此它们被移动了。