2014-01-08 30 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" 
     } 

用懶惰的導入。