【问题标题】:POST doesnt workPOST 不起作用
【发布时间】:2016-06-10 06:35:36
【问题描述】:

我试图从 django 中的帖子中获取值,但它传递了一个空字段 `def PersonEmail(request):

我试图从 django 中的帖子中获取值,但它传递了一个空字段 `def PersonEmail(request):

if request.method == "POST":
    form1 = PersonForm(request.POST, prefix="form1")
    form2 = EmailForm(request.POST, prefix="form2")
    name = form2['email'].value
    return HttpResponse(name)
else:
    form1 = PersonForm()
    form2 = EmailForm()
    return render(request, 'CreatePersonEmail.html', locals())`

但是当我将它们分开时,即

Im trying to get the value form a post in django but it pass an empty field `def PersonEmail(request):

if request.method == "POST":
    # form1 = PersonForm(request.POST, prefix="form1")
    form2 = EmailForm(request.POST, prefix="form2")
    name = form2['email'].value
    return HttpResponse(name)
else:
    form1 = PersonForm()
    form2 = EmailForm()
    return render(request, 'CreatePersonEmail.html', locals())`

它给了我字段的值。

为什么?我怎样才能获得两个表单字段的值?

【问题讨论】:

    标签: python django forms post


    【解决方案1】:

    基本上,你做错了。

    首先,您需要检查表单是否有效。用户可以输入任何废话,你不想让他们这样做:

    if request.method == "POST":
        form = MyForm(request.POST)
        if form.is_valid():
            # Now you can access the fields:
            name = form.cleaned_data['name']
    

    如果表单无效,只需将其传递回render(),它就会显示错误。

    另外,不要这样做:

    return render(request, 'CreatePersonEmail.html', locals())`
    

    正确构建你的上下文字典,不要使用locals(),它很hacky,你会污染你的上下文。

    所以一个完整的视图可能看起来像这样(取自 django 文档并稍作改动:

    def get_name(request):
        # if this is a POST request we need to process the form data
        if request.method == 'POST':
            # create a form instance and populate it with data from the request:
            form = NameForm(request.POST)
            # check whether it's valid:
            if form.is_valid():
                name = form.cleaned_data['name']
                return render(request, 'some_page.html', {'name': name})
    
        # if a GET (or any other method) we'll create a blank form
        else:
            form = NameForm()
    
        return render(request, 'name.html', {'form': form})
    

    【讨论】:

    • 好的,我看到了问题,我明白了,我修改了代码并制作了类似于您在上面显示的内容。但是当它验证表单时,不要通过,并且所有字段都是正确的:/
    【解决方案2】:

    您需要在两次实例化表单时都使用前缀;在 GET 和 POST 上。

    此外,您从表单的 cleaned_data 字典中获取值,而不是从字段中获取值。

    【讨论】:

    • 我仍然有第二个表格的问题,现在我从第一个表格中获得了值,但仍然缺少第二个表格
    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多