簡體   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