如何防止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”。
答案 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"
结果:
答案 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或破解浏览器行为即可。激光目标是仅更改要发送到该字段的表单渲染器的字符串,而绝对没有其他潜在的连锁影响。