我对Django
和用django1.11编写应用程序是新手。在
我想创建一个Profile update
页面。在
我已经创建了一个应用程序accounts
来管理所有与概要文件相关的活动并创建了一个类
from django.contrib.auth.models import User
# Create your views here.
from django.views.generic import TemplateView, UpdateView
class ProfileView(TemplateView):
template_name = 'accounts/profile.html'
class ChangePasswordView(TemplateView):
template_name = 'accounts/change_password.html'
class UpdateProfile(UpdateView):
model = User
fields = ['first_name', 'last_name']
template_name = 'accounts/update.html'
在myapp/accounts/urls.py
当我访问127.0.0.1:8000/accounts/update
时,它给出
AttributeError at /accounts/update/
Generic detail view UpdateProfile must be called with either an object pk or a slug.
因为,我希望登录的用户编辑他/她的配置文件信息。我不想在url中传递pk
。在
如何在django1.11中创建配置文件更新页面?
正如错误告诉你的那样,如果你不精确目标,你必须返回一个pk或slug。因此,通过重写get_object方法,可以告诉django要更新哪个对象。在
如果您想换一种方式,可以在url中发送对象的pk或slug:
^{pr2}$在这里,默认的
get_object
方法将捕捉args中的pk并找到要更新的用户。在请注意,第一种方法只有在用户想要更新其配置文件并经过身份验证(
self.request.user
)的情况下才有效,第二种方法允许您实际更新您想要的任何用户,只要您有了这个用户的pk(accounts/update/1
,将用pk=1更新用户,等等…)。在某些文档here,get_object()部分
相关问题 更多 >
编程相关推荐