Django中get_form_kwargs未传递user参数问题求助
问题原因及解决办法
核心问题1:表单__init__方法位置错误
你的ItemForm中,__init__方法被错误缩进在Meta类内部,导致该方法根本不会被执行,自然无法获取到user值。
核心问题2:自定义get方法未正确传递参数
你重写了get方法,但直接通过self.form_class(initial=self.initial)实例化表单,没有调用get_form_kwargs()传递包含user的参数,所以表单初始化时拿不到user。
修正后的代码
form.py 修正:
class ItemForm(forms.ModelForm): class Meta: model = Item fields = [ 'name', 'article', 'description', 'exceptions', 'bl', ] # 将__init__移到Meta类外部,修正缩进 def __init__(self,*args, **kwargs): user = kwargs.pop('user', None) print(user) # 现在可正常打印当前登录用户 super(ItemForm, self).__init__(*args, **kwargs)
view.py 修正:
class ItemCreateView(CreateView): template_name = 'menus/form.html' form_class = ItemForm def form_valid(self, form): instance = form.save(commit=False) instance.user = self.request.user return super(ItemCreateView, self).form_valid(form) def get_form_kwargs(self): kwargs = super(ItemCreateView, self).get_form_kwargs() kwargs['user'] = self.request.user return kwargs def get(self, request, *args, **kwargs): # 改用get_form()方法获取表单,自动携带get_form_kwargs中的参数 form = self.get_form() context = { 'form' : form, 'var' : 'Add an Item' } return render(request, self.template_name, context)
内容的提问来源于stack exchange,提问作者Andrei Tudor
相关产品推荐
相关产品推荐

