0
votes

My form needs data from the request variable request.LANGUAGE_CODE but the forms.py file doesn't have any way of getting the request variable.

I use the "The set_language redirect view" to set the language and it works fine, but I need to randomly generate a select dropdown for a form, and I simply can't get django to give me the language_code used.

The translation.get_language() used in the code snippet below only gives back 'en-us', but for every language.

class C21Form(ModelForm):
    principal_procedure_code= forms.ModelChoiceField(label=_('BlaBla'), queryset=diagCode.objects.filter(language=translation.get_language()))

Update:

forms.py

class C21Form(ModelForm):
    principal_procedure_code= forms.ModelChoiceField(label=_('BlaBla'), queryset=diagCode.objects.filter(language=language_code))

    def __init__(self, language_code=None, *args, **kwargs):
        self.language_code = language_code
        super(C21Form, self).__init__(*args, **kwargs)

views.py

 form = C21Form(request.LANGUAGE_CODE, request.POST)
2

2 Answers

0
votes

You can pass variable when initializing form.

In views.py:

form = C21Form(request.LANGUAGE_CODE, request.POST or None)

In form.py:

def __init__(self, language_code=None, *args, **kwargs):
    self.language_code = language_code
    super(C21Form, self).__init__(*args, **kwargs)
0
votes
class C21Form(ModelForm):
    principal_procedure_code= forms.ModelChoiceField(label=_('BlaBla'), queryset=None)

    def __init__(self, language_code="hu", *args, **kwargs):
        super(C21Form, self).__init__(*args, **kwargs)
        self.fields['principal_procedure_code'].queryset = diagCode.objects.filter(language=language_code)

Is a way it works, first I create an empty queryset, then filter it later.