[英]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.