【问题标题】:Django request variable in form表单中的 Django 请求变量
【发布时间】:2013-01-14 10:34:19
【问题描述】:

我的表单需要来自请求变量 request.LANGUAGE_CODE 的数据,但 forms.py 文件没有任何方法获取请求变量。

我使用“set_language 重定向视图”来设置语言,它工作正常,但我需要为表单随机生成一个选择下拉列表,我根本无法让 django 给我使用的语言代码。

下面代码 sn-p 中使用的translation.get_language() 仅返回“en-us”,但适用于每种语言。

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

更新:

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)

【问题讨论】:

    标签: django internationalization translation


    【解决方案1】:

    初始化表单时可以传递变量。

    在views.py中:

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

    在form.py中:

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

    【讨论】:

    • name 'language_code' is not defined 一分钟后我会用新代码更新问题。
    【解决方案2】:
    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)
    

    它是一种工作方式,首先我创建一个空查询集,然后过滤它。

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2010-10-06
      • 1970-01-01
      • 2017-10-13
      • 2015-08-08
      相关资源
      最近更新 更多