Django用户模型UpdateView“没有要重定向到的URL”

时间:2017-07-17 09:06:50

标签: django

我希望能够从用户面板编辑现有用户信息(如名字等)。我有一个显示所有用户的列表,当我按下“编辑”按钮时,我得到“没有要重定向到的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})

2 个答案:

答案 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 }}