gpt4 book ai didi

python - django 如何使用 UserChangeForm 更改帐户信息

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:58 24 4
gpt4 key购买 nike

我正在使用 django 制作一个网站。我正在 YouTube 上学习“如何让 super 用户使用表单更改帐户信息”。但是,我在编辑页面时遇到问题。

管理应用中的member_management.html

      {% for staff in staff_list %}
<tr>
<td><a href="{% url "management:edit_staff" staff.id %}">{{ staff }}</a></td>
<td>{{ staff.birth }}</td>
<td>{{ staff.groups.all.0 }}</td>
</tr>
{% endfor %}

如果我点击 {{staff}},页面 URL 会将“management/member_management”更改为“management/member_management/edit_staff/1”( 1 是员工 ID )。但页面不会转到edit_staff页面,而是重定向memeber_management页面(此页面)。

管理应用程序中的我的 urls.py

  from django.conf.urls import url, include
from management import views

urlpatterns = [
url(r'^member_management/', views.member_management, name='member_management'),
url(r'^member_management/edit_staff/(?P<staff_id>\d+)', views.edit_staff, name="edit_staff"),
]

管理应用程序中的我的views.py

from django.conf import settings
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserChangeForm
from authentication.models import User
from staff.models import Member

def member_management(request):
staff_list = User.objects.all()
member_list = Member.objects.all()
context = {
'staff_list':staff_list,
'member_list' : member_list,
}
return render(request, 'management/member_management.html', context)

def edit_staff(request, staff_id):
staff = User.objects.get(id=staff_id)
print("sdf")

if request.method == 'POST':
form = UserChangeForm(request.POST, instance=staff)

if form.is_valid():
form.save()
return redirect('member_management')
else:
staff = User.objects.get(id=staff_id)
form = UserChangeForm(instance=staff)

context = {
'form' : form,
}
return render(request, 'management/edit_staff.html', context)

有什么问题吗?我的 CMD 中没有出现任何错误,也许我错过了一些路线..任何帮助都会对我非常有帮助,谢谢!

最佳答案

您可以解决此问题,只需将 $(字符串结尾匹配字符) 放在第一个网址的末尾即可。

urlpatterns = [
url(r'^member_management/$', views.member_management,
name='member_management'),
url(r'^member_management/edit_staff/(?P<staff_id>\d+)',
views.edit_staff, name="edit_staff"),
]

Note that the regular expressions in this example don’t have a $ (end-of-string match character) but do include a trailing slash. Whenever Django encounters include() (django.conf.urls.include()), it chops off whatever part of the URL matched up to that point and sends the remaining string to the included URLconf for further processing.

如果您不输入 $,您可能会遇到意想不到的结果,例如:

management/member_management/edit_staff/1/foo/bar/baz 将匹配,并将调用 views.edit_staff

为避免这种情况,您还应该在 edit_staff 网址中包含 $

url(r'^member_management/edit_staff/(?P<staff_id>\d+)$', 
views.edit_staff, name="edit_staff"),

关于python - django 如何使用 UserChangeForm 更改帐户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com