【问题标题】:Django forms: how to use a switch case ChoiceField / choises using request.session value?Django 表单:如何使用 request.session 值使用 switch case ChoiceField / choises?
【发布时间】:2020-05-10 21:27:09
【问题描述】:

我有 2 个带有英语和法语标签的词库链接模型

我有 2 个类方法(options_list_eng 和 options_list_fra),它们根据代码传入参数返回标签列表:一个返回法语标签,另一个返回英文标签

我还有一个request.session['language'] 可以捕捉用户的浏览器语言

我想使用这些方法根据语言在我的表单中设置选择属性(request.session.get('language') 中的值)

我尝试使用类似的东西,但它不起作用

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

在我当前运行良好但不允许选择法语/英语翻译的代码下方

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)

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    您可以像这样在表单的__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)
    

    【讨论】:

    • 我试过了,但得到错误:NameError: name 'TYPES' is not defined
    • 不抱歉,它可以工作......但我没有这样构建我的表单
    • 首先我简单地在构造函数之外定义每个字段:ran_pro = forms.ChoiceField(label = _("Type"), widget=forms.Select,choices=TYPES)
    • not construct my form like that 是什么意思?
    • 我没有在构造函数中使用 self.fields["ran_pro"] 而是直接使用了ran_pro = outside...也许这不是正确的做法?
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 2012-09-18
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多