簡體   English   中英

為什么在向我的數據庫添加內容時只獲得默認值? (姜戈)

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

我認為您目前無法在表單中提交數據,您需要一個“提交typebutton才能將數據發送到表單的 URL(有關詳細信息,請參見此處)。

這並不能直接回答您的問題,但順便說一下,這里有一些改進代碼的提示:

  • 不要命名您的模型List ,這可能會導致與 Python 的list()內置函數混淆,后者返回一個list
  • 在嘗試訪問request.POST之前檢查請求是 POST 請求,否則您可能會收到500 internal server error 使用裝飾器require_POST()例如(參見 文檔),
  • 將 CSRF 令牌{% csrf_token %}添加到您的 HTML 表單並使其在 POST 請求中成為強制性的,例如通過將裝飾器@requires_csrf_token添加到您的視圖中(查看此頁面以獲取有關 Django 中 CSRF 的更多信息),
  • 最后,正如@Erik Kalkoken 的評論所建議的那樣,您應該盡可能地使用Django 的表單 API ,並避免從頭開始構建表單。 它會節省你的工作時間,而且會更干凈。

如果有幫助,請不要忘記接受這個答案。

暫無
暫無

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

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