You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:30:53