Django:不能在ModelForm中使用会话变量

2024-07-03 06:20:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个会话变量:

empresa=request.session['codEmp']

我有一个ModelForm和一个ModelChoiceField:

class AuxiForm(forms.ModelForm):
    tipAux = forms.ModelChoiceField(queryset=TipoAux.objects.all(), empty_label=None,
                                    required=True, to_field_name='codigo')

如果您看到tipAux的queryset,它当前正在调用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。你知道吗

有办法处理吗?你知道吗


Tags: noneobjectsrequestsessionrequiredformslabelempty
1条回答
网友
1楼 · 发布于 2024-07-03 06:20:03

尝试重写窗体的__init__()方法,并将session变量作为参数传入窗体:

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属性。(我将把阅读留给您,因为我自己只是刚刚熟悉一般视图。)

相关问题 更多 >