Django DecimalField验证错误:插入数据库触发异常
解决DecimalField插入数据库的验证错误问题
你的核心问题出在视图代码的对象创建环节:错误地将表单实例bidform赋值给了price字段,而非从cleaned_data中取出的price变量,这直接导致类型不匹配,触发数据库验证错误。Decimal('11.00')本身完全符合模型中DecimalField(max_digits=10, decimal_places=2)的要求,无需额外处理。
修正后的views.py代码
if request.method == "POST": bidform = BidForm(request.POST) if bidform.is_valid(): price = bidform.cleaned_data['price'] # 修正price字段的赋值,使用获取到的price变量而非表单对象 bid = Bid.objects.create(title=title, price=price, user=username) bid.save()
补充优化说明
- 模型和表单的定义没有问题,ModelForm会自动处理DecimalField的输入验证与转换,
cleaned_data中的Decimal('11.00')可以直接存入数据库。 Bid.objects.create()方法会自动调用save(),后续的bid.save()可以省略,简化代码:
if request.method == "POST": bidform = BidForm(request.POST) if bidform.is_valid(): price = bidform.cleaned_data['price'] bid = Bid.objects.create(title=title, price=price, user=username)
内容的提问来源于stack exchange,提问作者jeddah
相关产品推荐
相关产品推荐

