Mar*_*mro 4 python django django-models
如何防止Django在模型中自动大写verbose_name?例如:
class TestModel(models.Model):
enb_id = models.IntegerField(null=True, verbose_name="eNB ID", blank=True)
Run Code Online (Sandbox Code Playgroud)
我想自己处理大写,并在网站的任何地方显示"eNB ID"而不是"ENB ID".
在设置该模型字段的表单字段时,似乎Django将首字母大写:
...
defaults = {
'required': not self.blank,
'label': capfirst(self.verbose_name),
'help_text': self.help_text
}
Run Code Online (Sandbox Code Playgroud)
您可以创建自己的自定义模型字段来覆盖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)
Run Code Online (Sandbox Code Playgroud)
看起来这个简单的解决方法是在开头添加一个空格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"
Run Code Online (Sandbox Code Playgroud)