python - 初始值未显示在 DecimalField 中
问题描述
我有一个带有 a 的表单,DecimalField
我已经设置了初始值,如下所示:
class RawProductForm(forms.Form):
title = forms.CharField(label="")
description = forms.CharField(required=False)
price = forms.DecimalField(initial=199.99)
这是视图:
from django.shortcuts import render
from .forms import ProductForm, RawProductForm
from .models import Product
def product_create_view(request):
form = RawProductForm(request.GET)
if request.method == "POST":
form = RawProductForm(request.POST)
if form.is_valid():
print(form.cleaned_data)
Product.objects.create(**form.cleaned_data)
else:
print(form.errors)
context = {
"form": form
}
return render(request, "products/product_create.html", context)
但是,当我呈现页面时没有显示初始值:
可能是什么问题?
解决方案
您不应将request.GET
此处用作数据源,因为它会尝试从(可能不存在的)查询字符串中解析数据。如果要创建一个空的无界表单,请在没有数据的情况下构造它:
def product_create_view(request):
if request.method == "POST":
form = RawProductForm(request.POST)
if form.is_valid():
print(form.cleaned_data)
Product.objects.create(**form.cleaned_data)
else:
print(form.errors)
else:
form = RawProductForm()
context = {
"form": form
}
return render(request, "products/product_create.html", context)
话虽如此,您的代码还有一些其他问题。如果使用 POST 请求创建成功,最好重定向,并实现Post/Redirect/Get模式 [wiki]。此外,您可能在这里应该使用 a ModelForm
,这将确保模型对象(此处为 a Product
)的创建正确完成。
推荐阅读
- angular-material - DateTimePicker 不适用于角度材料
- hadoop - 如何使用 Hbase REST API 将数据从 IBM db2 导入 Hbase
- javascript - 如何在 Javascript 中创建带有路径的临时浏览器端文件
- mysql - MYSQL:BAD_FIELD_ERROR“字段列表”中的未知列
- vue.js - 对象不支持 Internet Explorer 11 上的属性或方法“替换”
- definition - Web数据的定义、维度和反义词
- python - 将函数应用于 4d 数组的每个维度,在 python 中返回一个 4d 数组
- java - 有没有办法覆盖 ConsulProperties 忽略 bootstrap.yml?
- r - 出现错误:[tcl] 预期整数但得到“r+”,如何覆盖?[更新:已解决]
- python - Pandas - 子集数据框 - 获取最外层索引级别的所有值