我想创建一个Django表单来编辑用户信息。我有:
urls.py
url(r'^settings/(?P<pk>[0-9]+)/', views.edit_profile, name='edit'),
views.py
@login_required
def edit_profile(request, pk):
user = get_object_or_404(User, pk=pk)
if request.method == 'POST':
form = UserForm(request.POST, instance=user)
if form.is_valid():
form.save()
else:
form = UserForm(instance=user)
return render(request, 'edit_user.html', {'form': form})
像这样,当用户编辑其信息时,可以从url更改pk并查看其他用户信息。如何在网址中隐藏此pk?
感谢。
答案 0 :(得分:3)
There's no need to accept the pk in the URL at all. The logged in user is always available as request.user
, so you can pass this directly as the instance argument to the form.
if request.method == 'POST':
form = UserForm(request.POST, instance=request.user)
if form.is_valid():
form.save()
else:
form = UserForm(instance=request.user)
return render(request, 'edit_user.html', {'form': form})
答案 1 :(得分:0)
更新您的网址
url(r&#39; ^ settings /&#39;,views.edit_profile,name =&#39; edit&#39;)
尝试向网址发送POST请求,没有人看到您发送到服务器的内容。
答案 2 :(得分:-2)
您可以创建自定义模板过滤器,以检查用户是否正在编辑自己的个人资料。
创建自定义标记:
首先发送名为pk
的上下文,其等于配置文件pk然后..
在app目录中创建一个名为templatetags
的目录,并在其中添加一个名为__init__.py
- 两个得分的python文件 - 现在创建另一个名为{{1}的文件输入以下内容:
profile_extras.py
现在在编辑个人资料模板中添加此
from django.template.loader_tags import register
@register.filter(name="ownPro")
def ownPro(user, id):
if Profile.objects.get(id=id).user == user:
return True
else:
return False
不要忘记重启服务器