2014-01-08 32 views
7

Django文档解释了如何在ModelForm模型映射中使用标签自定义: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/。 然而,当我尝试跟随它,我得到的错误:Django ModelForm标签定制

name '_' is not defined. 

我在做什么错?

另外,为什么圆括号前应该有一个_符号?

这里是我的代码:

class RuleForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(ModelForm, self).__init__(*args, **kwargs) 
     self.css_class = "rule" 

    class Meta: 
     model = Rule 
     fields = ("user", "title") 
     exclude = ("user") 
     widgets = { 
      "title" : TextInput(attrs={"class" : "title"}), 
     } 
     labels = { 
      "title": _("Rule Title"), 
     } 

回答

6

你导入以下?

from django.utils.translation import ugettext_lazy as _ 

ugettextugettext_lazy用于指定翻译字符串。 _用于节省打字。

请参阅Translation | Django documentation

+1

它确实消除了错误信息,但仍显示默认标题,而不是我指定的标题。事实上,我不需要任何译员,我可能会这样做:labels = {“title”:“Rule Title”,}但它仍然给我默认的标题而不是“规则标题”。 – jazzblue

+0

@GregoryR,确保你使用的是Django 1.6+。在Django 1.6中添加了'labels'选项。请参阅[从模型创建表格| Django文档 - 覆盖默认字段](https://docs.djangoproject.com/en/1.6/topics/forms/modelforms/#overriding-the-default-fields) – falsetru

+1

@GregoryR,BTW,'super(ModelForm,self ).__ init __(* args,** kwargs)'应该是'super(RuleForm,self).__ init __(* args,** kwargs)'。 'exclude =(“user”)' - >'exclude =(“user”,)'或'exclude = [“user”]'。 – falsetru

1

我有Django 1.6,我有同样的问题作为'GregoryR'。我没有尝试导入_ugettext_lazy作为_。相反,我这个做了简单的方法(最后一行):

def __init__(self, *args, **kwargs): 
    super(ModelForm, self).__init__(*args, **kwargs) 
    self.css_class = "rule" 
    self.fields['title'].label = 'Rule Title' <----- 
8

如果别人都在这个时候 (2016 - Django的1.9)寻找它

它的工作原理就像这对我来说:

labels = { 
      "title": "Rule Title", 
      "other_field": "Other Title" 
     } 

用懒惰的导入。