繁体   English   中英

Django ModelForm 表单未发布

[英]Django ModelForm Form not Posting

我的 forms.py 中有一个基于 ModelForm 的表单。 我最初按预期得到了空白表格,但是在填写表格并点击submit没有任何反应。 我不确定我哪里出错了。

视图.py

def add_customer(request):
    # print(customer_form)
    # print(customer_form.errors)
    print(request.method)
    print(request.POST)
    customer_form = CustomerForm(request.POST or None)
    if customer_form.is_valid() and request.method == 'POST':
        form = CustomerForm(request.POST)
        form.save()
        return redirect('AdminPortal:customers')
        print('posted')
    else:
        print('failing')
        context = {'customer_form': customer_form,}
        return render(request, 'add_customer.html', context=context)

网址.py

    path("customers/", views.customers, name="customers"),
    path("customers/customer/<int:id>/", views.customer, name="customer"),
    path("add_customer/", views.add_customer, name="add_customer"),

表格.py

class CustomerForm(forms.ModelForm):
    class Meta:
        model = AppCustomerCst
        fields = ('is_active_cst', 'name_cst', 'address_1_cst', 'address_2_cst', 'address_3_cst',
                  'city_cst', 'state_cst', 'zip_cst', 'country_cst', 'salesrep_cst', 'type_cst',
                  'is_allowed_flat_cst', 'iddef_cst', 'balance_notify_cst',  'receive_emails_cst',
                  'contact_domain_cst'
                  )

add_customer.py [表单部分]

    <form method="post" action='AdminPortal:add_customer'>
        {% csrf_token %}
        {{ customer_form }}
        <button type="button" value="submit">Submit</button>
        <button type="button" value="cancel">Cancel</button>

    </form>

看起来表单不知道在哪里发布。

您需要将其转换为 django url模板标签。 所以我会为你的表格做这样的事情;

<form method="post" action='{% url "AdminPortal:add_customer" %}'>
    {% csrf_token %}

    {% if form.non_field_errors %}
        {{ form.non_field_errors }}
    {% endif %}

    {% for hidden in form.hidden_fields %}
        {{ hidden }}
    {% endfor %}

    {% for field in form.visible_fields %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
            {% if field.help_text %}
                <p class="help">{{ field.help_text|safe }}</p>
            {% endif %}
        </div>
    {% endfor %}

    <button type="button" value="submit">Submit</button>
    <button type="button" value="cancel">Cancel</button>
</form>

要了解您的观点,我建议稍微简化逻辑,使其更符合此处的文档; https://docs.djangoproject.com/en/3.1/topics/class-based-views/intro/#handling-forms-with-class-based-views

因为您将 post & valid 检查加倍,所以我怀疑您永远不会看到验证错误,因为它们仅来自该代码块。 因此,将您的视图更改为这样的内容,如果您按照上述方式更新模板,您应该会看到一些错误;

def add_customer(request):

    if request.method == 'POST':
        form = CustomerForm(request.POST)

        if form.is_valid():
            form.save()
            return redirect('AdminPortal:customers')
    else:
        form = CustomerForm()

    return render(request, 'add_customer.html', {'customer_form': form})

我在 HTML 模板中发现了我的错误。 我有:

<button type="button" value="submit">Submit</button>
<button type="button" value="cancel">Cancel</button>

一旦更新为:

        <input type="submit" value="submit">Submit</input>
        <input type="submit" value="cancel">Cancel</input>

表单按预期正确发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM