1

我有一个 django 视图将用户的首选语言环境传达给 forms.py 中的表单。但是,该表单似乎在我调用它之前就已经初始化了。

类 SurveyForm() 似乎在我从 views.py 调用之前加载,甚至SurveyForms()初始化函数激活之前加载。

这是代码:

class SurveyForm(forms.Form):
    questions = Question.objects.all()
    Q1 = questions.get(identifier='Q1')
    question1 = forms.CharField(required=False, label=Q1.name)

    def __init__(self, *args, **kwargs):
        translation.activate('nl')

当我上课时,它确实有效translation.activate('nl')SurveyForm当我放入translation.activate('nl'),__init__或 时views.py,它不起作用。这怎么能改变?

注意:我使用模型翻译,所以Q1.name当荷兰语处于活动状态时会得到荷兰语翻译。

4

1 回答 1

2

在定义类时,在第一次导入时执行类级别的任何内容。您已经知道如何在实例化时做事——通过在__init__方法中做。

从你的问题中不清楚Q1是什么。是场吗?如果是这样,您可以将其添加到self.fields; 否则直接设置在self.

def __init__(self, *args, **kwargs):
    translation.activate('nl')
    super(SurveyForm, self).__init__(*args, **kwargs)
    self.fields['Q1'] = ...
    # or
    self.Q1 = ...
于 2016-01-24T21:18:14.823 回答