python - 我如何在 django 上编辑其他用户的个人资料
问题描述
我有两个独立的用户,我希望一些用户能够修改其他用户的个人资料。我现在面临的问题是如何获取用户 ID。我对此有两个意见。纵断面图,编辑纵断面图。我试图将整个配置文件 html 包装在一个表单中,我不确定这是否可行。大多数示例仅显示如何编辑当前(登录)用户的个人资料。
指向特定用户个人资料的链接 ( http://127.0.0.1:8000/dashboard/profile/dfrtgy-ehehh/16 ) 个人资料页面有一个指向编辑个人资料页面的链接。
个人资料 html
<li>
<a href="{% url 'editprofile' %}"><img class="nav-items" src="{% static 'images/lab.svg'%}" alt=""><span>Edit profile</span>
</a>
</li>
视图.py
def edit_profile(request):
if request.method == 'POST':
profile = Profile.objects.get(pk=pk)
form = EditProfileForm(request.POST, instance=request.user.profile)
if form.is_valid():
form.save()
return redirect(f'/dashboard/profile/{request.user.profile.slug}/{request.user.pk}')
else:
form = EditProfileForm(instance=request.user.profile)
args = {'form': form}
return render(request, 'core/editprofile.html', args)
def profile(request, slug, pk):
profil = Profile.objects.get(slug=slug)
profile = Profile.objects.get(pk=pk)
context = {'profile': profile, 'profil': profil}
return render(request, 'dashboard/profile.html', context)
网址.py
urlpatterns = [
path('', dashboard, name='dashboard'),
path('profile/', profile, name='profile'),
path('profile/<str:slug>/<int:pk>', profile, name='profilepk'),
path('edit_profile/', edit_profile, name='editprofile'),
解决方案
我猜您正在尝试编辑您所在的个人资料的用户。您可能想尝试获取当前用户(您所在的个人资料的用户)的 ID 并将其传递到 editprofile URL,如下所示:
<li>
<a href="{% url 'editprofile' profile.user.id %}"><img class="nav-items" src="{% static 'images/lab.svg'%}" alt=""><span>Edit profile</span>
</a>
</li>
然后用 url 传递它:
path('edit_profile/<int:id>/', edit_profile, name='editprofile'),
在您的 editprofile 视图中,执行以下操作:
from django.shortcuts import render, redirect, get_object_or_404
def edit_profile(request,id):
profile = Profile.objects.get(user_id=id)
user = get_object_or_404(Profile, pk=id, user=profile.user.id)
if request.method == 'POST':
form = EditProfileForm(request.POST, instance=profile)
if form.is_valid():
form.save()
return redirect(f'/dashboard/profile/{profile.user.slug}/{profile.user.pk}')
else:
return HttpResponse('Could not save')
else:
form = EditProfileForm(instance=user)
args = {'form': form}
return render(request, 'core/editprofile.html', args)
希望这可以帮助!(:
推荐阅读
- javascript - 使用 vue-i18n 转换 Vue 组件 prop 的默认值
- c# - Azure 静态网站是否支持使用 https 的主机名映射
- node.js - 了解 Azure Function 中的 Mongoose 连接
- javascript - 如何在按钮的不同点击中调用不同的 JS 函数?
- c - c语言中可能的函数重载?
- html - 使用 jQuery 使链接中的内容出现在指定的 div 中
- salesforce - 在 Data Vault 2.0 方法中建模 Salesforce 多态关系
- kubernetes - Redis 集群连接丢失
- r - 更改绘制线的顺序,以便在 ggplot 中的时间序列中位于顶部
- java - Java AudioSystem.getAudioFileTypes() 在 android 中返回空数组