簡體   English   中英

通過 Django 表單 POST 到數據庫不保存數據

[英]Form POST to database via Django doesn't save data

按照 Django 教程,我編寫了以下 html 文件,該文件采用用戶填寫的表單並將其作為對象添加到數據庫中(表單是類的一堆屬性)


{% block content %}

<form>
<form method="POST"> {% csrf_token %} 
    {{ form.as_p }}
<input type='submit' value = 'save' />
</form>
{% endblock %}

它沒有將表單保存到數據庫中,而是在 url 中添加了一個奇怪的字符串(粘貼在下面)。 這發生在教程中的那個人身上,但在他添加<form method="POST"> {% csrf_token %}了這個“錯誤”是什么,我該如何處理? 另外,如果將來發生這種情況我該怎么辦?

沒有真正的錯誤,服務器運行良好,因此沒有可顯示的回溯/錯誤消息。 我確保form.as_p是一個真正的變量,並且與教程相關的變量或標簽中沒有拼寫錯誤。 我能想到的唯一問題是版本的變化 - 教程在 Django 2.0.7 中,我在 3.2.5,但根據我在文檔中看到的內容, csrf_token仍然有效。

添加到下面的網址。 如果只是形式 (asd,asd,1) 的值,我知道結束,但其余的是什么,我該怎么做才能解決它? ?csrfmiddlewaretoken=KWR2kXFqa3k1ETQsuyhKmHN6cJvZfj72KHkw1v4aGYTdThW9S7zWylCFJpNjhVDB&title=asd&description=asd&price=1

謝謝!

編輯:

表格.py:

from django import forms
from .models import product

class ProductForm(forms.ModelForm):
    class Meta:
    model = product
        fields = ['title','description','price']

視圖.py:

def product_create_view(request):
    form = ProductForm(request.POST or None)
    if form.is_valid():
        form.save()
    context = {
        'form': form
    }

    return render (request, 'product/product_create.html', context)

另外:從代碼中刪除了{% csrf_token %} ,但它仍然不起作用。 它只是將表單輸入放在 url 中並沒有保存它。

您的表單有一個錯誤的額外標簽

{% block content %}

<form> <!-- Remove this  -->
<form method="POST"> {% csrf_token %} 
    {{ form.as_p }}
<input type='submit' value = 'save' />
</form>
{% endblock %}

這使您的表單使用默認方法(即 GET,而不是 POST),因此您的數據被添加到 URL 中。 CSRF 只不過是表單中的一個額外字段,這就是它也在 url 中的原因

首先改變你的看法

def product_create_view(request):
    if request.method == 'POST'
        form = ProductForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = ProductForm()
    return render (request, 'product/product_create.html', {'form': form})

然后在你的 html

{% block content %}

    <form method="POST"> {% csrf_token %} 
        {{ form.as_p }}
    <input type='submit' value = 'save' />
    </form>
    {% endblock %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM