[英]Why am I only getting default values when adding something to my database? (Django)
我正在嘗試將任務添加到我的待辦事項列表中。 我添加的所有任務都列在主頁 (home.html) 上,但每當我嘗試添加某些內容時,它總是將我的輸入設置為默認值(我在最后添加了一張圖片)。 我知道我在視圖中寫了“default_value”,但我想檢查它是否甚至添加了待辦事項而不會引發錯誤。
視圖.py
def newTodo(request):
obj = List()
obj.taskText = request.POST.get("taskText", "default_value")
obj.taskDate = request.POST.get("taskDate", "default_value")
obj.taskDerc = request.POST.get("taskDerc", default= 5)
obj.save()
mydict = {
"all_tasks" : List.objects.all()
}
return render(request, 'newTodo.html', context=mydict)
newTodo.html (使用 Bootstrap)
<tbody>
{% block content %}
<tr>
<form action="{% url 'newTodo' %}">
<td scope="row">
<input type="text" class="form-control" id="taskText" name="taskText"></td>
<td scope="row">
<input type="text" class="form-control" id="taskDate" name="taskDate"></td>
<td scope="row">
<input type="text" class="form-control" id="taskDerc" name="taskDerc"></td>
<td><a href="{% url 'home' %}" class="btn btn-success" role="button">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check" viewBox="0 0 16 16">
<path d="M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z" />
</svg>
</a>
</td>
</form>
</tr>
{% endblock %}
</tbody>
我錯過了什么? 任何形式的幫助表示贊賞!
編輯/更新我自己修好了。 顯然,您不能從我在 newTodo.html 中使用的引導程序中使用此表,至少不能以這種形式使用。 它找不到任何輸入,所以它總是使用 default_value。 我也變了
<form action="{% url 'newTodo' %}">
至
<form action="{% url 'submit' %}" method="get">
因為每當我點擊 newTodo.html 時,它會自動生成一個新的待辦事項,而不是僅在添加輸入時這樣做。 我將views.py 中的“newTodo”更改為“提交”和其他一些內容,但是是的,一般來說就是這樣。
我可能錯了,但嘗試替換文件newTodo.html
中的這些代碼行:
<a href="{% url 'home' %}" class="btn btn-success" role="button"><!–– your SVG ––></a>
通過類似的東西
<button type="submit" class="btn btn-success"><!–– your SVG ––></button>
我認為您目前無法在表單中提交數據,您需要一個“提交” type
的button
才能將數據發送到表單的 URL(有關詳細信息,請參見此處)。
這並不能直接回答您的問題,但順便說一下,這里有一些改進代碼的提示:
List
,這可能會導致與 Python 的list()
內置函數混淆,后者返回一個list
,request.POST
之前檢查請求是 POST 請求,否則您可能會收到500 internal server error
。 使用裝飾器require_POST()
例如(參見 文檔),{% csrf_token %}
添加到您的 HTML 表單並使其在 POST 請求中成為強制性的,例如通過將裝飾器@requires_csrf_token
添加到您的視圖中(查看此頁面以獲取有關 Django 中 CSRF 的更多信息),如果有幫助,請不要忘記接受這個答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.