簡體   English   中英

Django 當我采取行動時,表格沒有保存 = 到所需的 url

[英]Django form is not saving when I have action = to desired url

如果我在 django 表單中使用 action="",該表單可以正常工作,但會將用戶發送到錯誤的頁面。 我希望用戶在提交表單時將 go 返回到宏/頁面,但是當我將 url 添加到操作中時(如 action="{% url 'macro' %}",它會轉到頁面但表單不會保存。關於如何處理這個有什么建議嗎?代碼如下:

(選項 1) macro_update.html -> 此處的表單正常工作,但將用戶帶到錯誤的頁面

                <ul>
                    <form action="" method="post">
                        {% csrf_token %}
                        {{ macro_form.as_ul }}
                        <input type="submit" value="Submit">
                    </form>
                </ul>

(選項 2) macro_update.html -> 用戶在提交后被重定向到正確的頁面,但表單數據不更新/保存

                <ul>
                    <form action="{% url 'macro' %}" method="post">
                        {% csrf_token %}
                        {{ macro_form.as_ul }}
                        <input type="submit" value="Submit">
                    </form>
                </ul>

視圖.py

@login_required(login_url='login')
def macroUpdate(request):

    if request.method == "POST":
        macro_form = MacroForm(request.POST, instance=request.user.profile)
        if macro_form.is_valid():
            macro_form.save()
            messages.success(request,('Your macros were successfully updated!'))
        else:
            messages.error(request,('Unable to complete request'))
        return redirect("profile")

    macro_form = MacroForm(instance=request.user.profile)    
    context = {"user":request.user, "macro_form":macro_form } 
    return render(request, 'macro_update.html', context)

網址.py

urlpatterns = [
    path('', views.loginPage, name='login'),
    path('register/', views.registerPage, name='register'),
    path('profile/', views.profilePage, name='profile'),
    path('profile/update/', views.profileUpdate, name='profile-update'),
    path('logout/', views.logoutUser, name='logout-user'),
    path('macro/', views.macroPage, name='macro'),
    path('macro/update/', views.macroUpdate, name='macro-update'),
]

我希望用戶在提交表單時將 go 返回到宏/頁面,但是當我將 url 添加到操作中時(如 action="{% url 'macro' %}",它會轉到頁面但表單不會救。

這是因為表單數據必須 go 到macroUpdate視圖才能保存而不是macroPage ,要在提交表單后在宏頁面上重定向,您可以使用redirect("macro")所以:

意見.py:

@login_required(login_url='login')
def macroUpdate(request):

    if request.method == "POST":
        macro_form = MacroForm(request.POST, instance=request.user.profile)
        if macro_form.is_valid():
            macro_form.save()
            messages.success(request,('Your macros were successfully updated!'))
        else:
            messages.error(request,('Unable to complete request'))
        return redirect("macro")

    macro_form = MacroForm(instance=request.user.profile)    
    context = {"user":request.user, "macro_form":macro_form } 
    return render(request, 'macro_update.html', context)

只需從macro_update.html的標記中刪除action屬性,因為 Django 始終采用當前頁面路由,因此:

<ul>
    <form method="POST">
        {% csrf_token %}
        {{ macro_form.as_ul }}
        <input type="submit" value="Submit">
    </form>
</ul>

暫無
暫無

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

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