Django: не могу использовать сессионные переменные в ModelForm - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть сеанс var:

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в настоящее время он вызывает все TipoAux объекты, но мне действительно нужно сделать filter , вызывая только TipoAux объекты, которые имеют тот же атрибут empresa, что и пользовательимеет на своем codEmp сеансе var.

Я пытался сделать:

tipAux = forms.ModelChoiceField(queryset=TipoAux.objects.filter(empresa=request.session['codEmp']),
                                empty_label=None, required=True,
                                to_field_name='codigo')

Но Django не позволяет мне использовать request.session в форме.

Есть ли способ справиться с этим?

1 Ответ

0 голосов
/ 14 февраля 2019

Попробуйте переопределить метод __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'])

В качестве альтернативы вы можете использовать общий вид модели Джанго .Если ваша форма не сложнее, чем та, которую вы опубликовали, вы просто установите атрибут queryset.(Я оставлю чтение вам, потому что сам только знакомлюсь с общими взглядами.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...