如何停止Django中verbose_name的自动大写化

5 投票
5 回答
4639 浏览
提问于 2025-04-17 11:02

如何防止Django在模型中自动将verbose_name首字母大写?比如:

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

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

5 个回答

1

在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"

结果: 在这里输入图片描述

9

看起来,Django在为模型字段设置表单字段时,会把第一个字母大写

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

你可以创建一个自己的自定义模型字段,来覆盖这个capfirst(通过传递标签作为参数):

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)
11

看起来解决这个问题的简单方法是在verbose_name的开头加一个空格。负责把字母变成大写的函数(capfirst)只会改变第一个字母。如果这个字母前面是个空格,那就不会有任何变化。因为网页浏览器会忽略连续的空格,所以显示出来的内容就会正常。

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

    class Meta:
        verbose_name = " test model"

撰写回答