![](/img/trans.png)
[英]Django: can I have both “action=” and jQuery assigned to the same form?
[英]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.