Django:无法在ModelForm中使用会话变量

时间:2019-02-13 22:33:47

标签: python django session

我有这个会话变量:

handleClick() { this.setState(prevState => ({ currentPage: prevState.currentPage > 0 ? prevState.currentPage - 1 : 0 // if current page is greater than 0, subtract 1, else set it 0 })) }

我有一个带有ModelChoiceField的ModelForm:

empresa=request.session['codEmp']

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

我尝试这样做:

codEmp

但是Django不允许我使用以下形式的tipAux = forms.ModelChoiceField(queryset=TipoAux.objects.filter(empresa=request.session['codEmp']), empty_label=None, required=True, to_field_name='codigo')

有什么办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

尝试覆盖表单的__init__()方法,并将会话变量作为参数传递给表单:

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_on=request.session['codEmp'])

或者,您可以使用Django的通用model view。如果您的表单并不比您发布的表单复杂,则只需设置queryset属性。 (我会把这本书留给您,因为我自己只是对通用视图很熟悉。)