【问题标题】:Django forms.py initialized wrongly?Django forms.py 初始化错误?
【发布时间】:2016-05-01 01:55:58
【问题描述】:

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

Class SurveyForm() 似乎加载了 before 我从views.py 调用的内容,甚至before SurveyForms() init 函数也被激活了。

代码如下:

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 会在荷兰语处于活动状态时获得荷兰语翻译。

【问题讨论】:

  • 请确认我已正确编辑代码。

标签: python django python-2.7 django-modeltranslation


【解决方案1】:

在定义类时,在第一次导入时执行类级别的任何操作。您已经知道如何在实例化时执行操作 - 通过在 __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 = ...

【讨论】:

  • 感谢您的回答,为了清晰起见,我已经更新了代码。
  • 1. self.fields['Q1'] 给出错误:'SurveyForm' 对象没有属性'fields'
  • 2. self.Q1:有效,但我进入了模板:
  • @Jdruiter self.fields 将在您调用 super().__init__() 后工作。
  • 太棒了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2015-03-18
  • 2019-08-05
  • 2013-04-12
  • 2018-08-27
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多