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
的查询集,它当前正在调用allTipoAux
对象,但我确实需要做一个过滤器,只调用用户在其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
属性。(我将把阅读内容留给您,因为我自己才刚刚熟悉一般视图。)