首页 > 解决方案 > 初始值未显示在 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)

但是,当我呈现页面时没有显示初始值:

截屏

可能是什么问题?

标签: pythondjango

解决方案


您不应将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)的创建正确完成。


推荐阅读