Django формы: как использовать регистр переключения ChoiceField / choises с использованием значения request.session? - PullRequest
1 голос
/ 24 января 2020

У меня есть 2 связанные модели для тезауруса с метками на английском языке sh и французском

У меня есть 2 метода класса (options_list_eng и options_list_fra), которые возвращают список меток на основе кода, передаваемого в параметрах: одна который возвращает французские метки, а другие возвращают Engli sh метки

У меня также есть request.session['language'], который ловит язык браузера пользователя

Я хочу использовать эти методы для установки атрибутов выбора в моей форме в зависимости от языка (значение в request.session.get('language'))

Я пытаюсь использовать что-то подобное, но это не работает

if self.language == 'en':
    TYPES = Thesaurus.options_list_eng(1)
else:
    TYPES = Thesaurus.options_list_fra(1)

ниже моего текущего кода, который работает хорошо, но не разрешить французский / английский sh перевод вариантов

forms.py

class RandomisationForm(forms.ModelForm):
    def __init__(self, request, *args, **kwargs):
        self.request = request
        self.language = request.session.get('language')
        super(RandomisationForm, self).__init__(*args, **kwargs)

TYPES = Thesaurus.options_list_eng(1)
ran_pro = forms.ChoiceField(label = _("Type"), widget=forms.Select, choices=TYPES)

1 Ответ

0 голосов
/ 24 января 2020

Вы можете определить поле в методе __init__ формы следующим образом:

class RandomisationForm(forms.ModelForm):
    def __init__(self, request, *args, **kwargs):
        super(RandomisationForm, self).__init__(*args, **kwargs)
        self.request = request
        self.language = request.session.get('language')
        if self.language == 'en':
            TYPES = Thesaurus.options_list_eng(1)
        else:
            TYPES = Thesaurus.options_list_fra(1)

        self.fields["ran_pro"] = forms.ChoiceField(label = _("Type"), widget=forms.Select, choices=TYPES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...