如何停止Django中verbose_name的自动大写化
如何防止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"