Python Django:Can';不要在ModelForm中使用会话变量

Python Django:Can';不要在ModelForm中使用会话变量,python,django,session,Python,Django,Session,我有一个会话变量: empresa=request.session['codEmp'] 我有一个带有ModelChoiceField的ModelForm: class AuxiForm(forms.ModelForm): tipAux = forms.ModelChoiceField(queryset=TipoAux.objects.all(), empty_label=None, required=True, to

我有一个会话变量:

empresa=request.session['codEmp']

我有一个带有ModelChoiceField的ModelForm:

class AuxiForm(forms.ModelForm):
    tipAux = forms.ModelChoiceField(queryset=TipoAux.objects.all(), empty_label=None,
                                    required=True, to_field_name='codigo')
如果您看到
tipAux
的查询集,它当前正在调用all
TipoAux
对象,但我确实需要做一个过滤器,只调用用户在其
codEmp
会话变量上具有相同
empresa
属性的
TipoAux
对象

我试着这样做:

tipAux = forms.ModelChoiceField(queryset=TipoAux.objects.filter(empresa=request.session['codEmp']),
                                empty_label=None, required=True,
                                to_field_name='codigo')
但是Django不允许我在表单中使用
request.session


有什么方法可以处理这个问题吗?

尝试重写表单的
\uuu init\uuu()方法,并将会话变量作为参数传递给表单:

class AuxiForm(forms.ModelForm):
    def __init__(filter_on, *args, **kwargs):
        super(AuxiForm, self).__init__(*args, **kwargs)
        self.fields['tipAux'] = forms.ModelChoiceField(
            queryset=TipoAux.objects.filter(empresa=filter_on), 
            empty_label=None,
            required=True, 
            to_field_name='codigo'
        )
view.py
中,您可以这样说:
form=AuxiForm(data=request.POST,filter\u on=request.session['codEmp'])

或者,您可以使用Django的泛型。如果您的表单不比您发布的表单复杂,您只需设置
queryset
属性。(我将把阅读内容留给您,因为我自己才刚刚熟悉一般视图。)