我有这个会话变量:
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')
。
有什么办法解决这个问题?
答案 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
属性。 (我会把这本书留给您,因为我自己只是对通用视图很熟悉。)