TypeError: post() 得到一个意外的关键字参数 'slug'



我有一个显示用户个人资料页面的详细信息视图。配置文件采用作为 URL 一部分的辅助信息域名称。例如,/profile/john/其中john是用户名,我们在 John 的个人资料中。如下所示:

class ProfileView(DetailView):
model = User
slug_field = 'username'
template_name = 'oauth/profile.html'
context_object_name = 'user_profile' 
def post(self, request):
return render(request, self.template_name)

现在,每当我提交表单时,我都会收到一个错误,上面写着:TypeError: post() got an unexpected keyword argument 'slug'知道这一点后,我在 post 方法中添加了一个新参数,即 slug。但是,当我提交表单时,我得到一个空白页,没有关于用户的详细信息。我们被重定向到同一页面,但这次没有关于用户配置文件的值。我做错了什么?

您还应该添加slug作为方法参数:

def post(self, request, slug):
return render(request, self.template_name)

您还需要将上下文传递给模板:

def post(self, request, slug):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return render(request, self.template_name, context=context)

但实际上,由于您的帖子没有向视图添加特定逻辑,因此您可以调用super

def post(self, request, slug):
return super().post(request, slug)

或者简单地完全删除post方法,因为它是多余的。

最新更新