如何在django中停止verbose_name的自动大写

时间:2012-01-25 09:06:19

标签: python django django-models

如何防止Django在模型中自动大写verbose_name? E.g:

class TestModel(models.Model):
    enb_id = models.IntegerField(null=True, verbose_name="eNB ID", blank=True)

我想自己处理大写,并在网站的任何地方显示“eNB ID”而不是“ENB ID”。

5 个答案:

答案 0 :(得分:7)

似乎简单的解决方法是在verbose_name的开头添加一个空格。执行大写(capfirst)的函数仅更改第一个字母。如果它是一个空白,那么什么都不会改变。因为Web浏览器会忽略连续的空格,所以一切都会正确显示。

class TestModel(models.Model):
    enb_id = models.IntegerField(null=True, verbose_name=" eNB ID", blank=True)

    class Meta:
        verbose_name = " test model"

答案 1 :(得分:6)

似乎Django capitalizes the first letter when setting the form field for that model field

...
defaults = {
    'required': not self.blank,
    'label': capfirst(self.verbose_name),
    'help_text': self.help_text
}

您可以创建自己的自定义模型字段,覆盖capfirst(将标签作为kwarg传递):

from django.db import models
class UpcappedModelField(models.Field):

    def formfield(self, form_class=forms.CharField, **kwargs):
        return super(UpcappedModelField, self).formfield(form_class=forms.CharField, 
                         label=self.verbose_name, **kwargs)

答案 2 :(得分:0)

在Meta类中添加verbose_name对我有用。

from django.db import models

class Artist(models.Model):
    name = models.CharField("Artist", max_length=255, unique=True)

    class Meta:
        verbose_name = "Artist"
        verbose_name_plural = "aRTiStS"

结果: enter image description here

答案 3 :(得分:0)

如果需要所有字段名称以第一个字符小写开头(例如,在创建表单中),则可以在css中将其设置为标签:

label:first-letter {
    text-transform: lowercase;
}

答案 4 :(得分:0)

我相信现代Django(v1.11 +)中“最正确”的答案是执行以下操作:

class TestModel(models.Model):
    field_name = models.CharField(verbose_name=_('field name'), blank=True)


class TestModelForm(forms.ModelForm):
    class Meta:
        model = TestModel
        fields = '__all__'
        labels = {
            'field_name': _('field name')
        }

这不需要您定义自定义的 model 字段,只需更改 form ,使用自定义CSS或破解浏览器行为即可。激光目标是更改要发送到该字段的表单渲染器的字符串,而绝对没有其他潜在的连锁影响。