【问题标题】:Django ModelForm label customizationDjango ModelForm 标签定制
【发布时间】:2014-01-26 00:44:38
【问题描述】:

Django 文档在此处解释了如何在 ModelForm 模型映射中使用标签自定义: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/。 但是,当我尝试遵循它时,我得到了错误:

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"),
        }

【问题讨论】:

    标签: python django label django-forms


    【解决方案1】:

    您是否导入了以下内容?

    from django.utils.translation import ugettext_lazy as _
    

    ugettextugettext_lazy 用于指定翻译字符串。 _ 用于保存输入。

    Translation | Django documentation

    【讨论】:

    • 它确实摆脱了错误消息,但它仍然显示默认标题,而不是我指定的标题。实际上我这里不需要任何翻译,我可能只需要:labels = {"title": "Rule Title",},但它仍然给我默认标题而不是"Rule Title"。
    • @GregoryR,确保您使用的是 Django 1.6+。 labels 选项是在 Django 1.6 中添加的。见Creating forms from models | Django documentation - Overriding the default fields
    • @GregoryR,顺便说一句,super(ModelForm, self).__init__(*args, **kwargs) 应该是 super(RuleForm, self).__init__(*args, **kwargs)exclude = ("user") -> exclude = ("user",)exclude = ["user"].
    • @GregoryR, ("user") 是一个字符串,而不是一个元组。
    • 是的,我有 Django 1.5.1,这就是问题所在。
    【解决方案2】:

    我有 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' <-----
    

    【讨论】:

      【解决方案3】:

      如果此时其他人正在寻找它 (2016 - Django 1.9)

      它对我来说就像这样:

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

      没有惰性导入。

      【讨论】:

      • 这对我不起作用,不管有没有惰性导入。
      猜你喜欢
      • 1970-01-01
      • 2018-12-24
      • 2014-02-24
      • 2010-11-19
      • 2012-03-09
      • 1970-01-01
      • 2012-05-23
      • 2014-08-05
      • 1970-01-01
      相关资源
      最近更新 更多