Django CBV中在form_class访问request对象遇参数错误,求解决
问题解决:BaseModelForm 意外收到'request'参数错误
错误原因
你的表单__init__方法中,先调用了super().__init__(*args, **kwargs),此时kwargs里还包含request参数,但BaseModelForm的构造函数并不接受这个额外参数,因此抛出错误。
修正方案
修改表单的__init__方法,先从kwargs中取出request,再调用父类的构造方法:
def __init__(self, *args, **kwargs): # 先取出request,再调用父类构造 request = kwargs.pop('request', None) super().__init__(*args, **kwargs) # 因为用了LoginRequiredMixin,request.user必然存在,可直接使用 if request: self.fields['tags'].queryset = Tag.objects.filter(user=request.user)
额外说明
- 由于你的视图继承了
LoginRequiredMixin,只有登录用户才能访问,所以request不会是None,request.user也一定有效,这里的if request判断是为了代码健壮性。 - 视图中的
get_form_kwargs写法是正确的,不需要修改。
内容的提问来源于stack exchange,提问作者Wamz
相关产品推荐
相关产品推荐

