Как остановить автокапитализацию verbose_name в django - PullRequest
3 голосов
/ 25 января 2012

Как запретить Django автоматически использовать заглавные буквы verbose_name в моделях?Например:

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

Я хочу обрабатывать заглавные буквы самостоятельно и отображать «ID eNB» вместо «ENB ID» в любом месте сайта.

Ответы [ 4 ]

7 голосов
/ 02 февраля 2012

Кажется, что простой обходной путь для этого - добавить пробел в начале 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"
6 голосов
/ 25 января 2012

Кажется, что Джанго использует заглавную букву при установке поля формы для этого поля модели :

...
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)
0 голосов
/ 12 апреля 2019

если нужно, чтобы имена всех полей начинались с строчной буквы первого символа (например, в формах создания), это можно установить для метки в css:

label:first-letter {
    text-transform: lowercase;
}
0 голосов
/ 25 января 2012

Добавление verbose_name в Meta class работает для меня.

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

...