我希望能够从用户面板编辑现有用户信息(如名字等)。我有一个显示所有用户的列表,当我按下“编辑”按钮时,我得到“没有要重定向到的URL。要么提供网址,要么在模型上定义get_absolute_url方法。”错误。
以下是我的一些代码:
class UserUpdate(UpdateView):
model = User
fields = ['first_name', 'last_name', 'email']
pk_url_kwarg = 'user_id'
template_name = 'companies/user_update.html'
urls.py
url(r'^users/$', views.user_index, name='user_index'),
# /company/user/<id>
url(r'^users/(?P<user_id>[0-9]+)/$', views.user_detail,
name='user_detail'),
# /company/users/<id>/update/
url(r'^users/(?P<user_id>[0-9]+)/update/$', views.UserUpdate.as_view(),
name='user_update'),
我尝试通过将此代码添加到models.py来修复它,但我得到了相同的错误
class UserMethods(User):
def get_absolute_url(self):
return reverse('companies:user_detail', kwargs={'pk': self.pk})
class Meta:
proxy = True
我也尝试在views.py中将此方法添加到UpdateView,但是我得到了 “'UserUpdate'对象没有属性'user_id'”
def get_success_url(self):
return reverse('companies:user_detail', kwargs={
'user_id': self.user_id})
答案 0 :(得分:4)
为什么将get_absolute_url
方法放在代理上,而不是用户模型本身?如果您想这样做,则必须在视图中使用UserMethods作为模型。
但另一种方法的修复方法是从self.object
获取user_id:
return reverse('companies:user_detail', kwargs={'user_id': self.object.id})
答案 1 :(得分:2)
在您的模型上试试这个。
class UserMethods(User):
def get_absolute_url(self):
return reverse('companies:user_detail', args=(self.id,))
每当您想在模板中提供此网址时,只需输入{{ object.get_absolute_url }}
。