Атрибут verbose_name

Атрибут verbose_name определяется внутри внутреннего класса Meta модели Django. Он задает человекочитаемое имя модели в единственном числе, которое используется в административном интерфейсе, в сообщениях об ошибках и в других местах, где требуется отображать название модели для пользователя. Если атрибут не задан, Django автоматически генерирует имя на основе имени класса модели, заменяя заглавные буквы на пробелы.

Синтаксис

pythonclass Meta:
  verbose_name = 'человекочитаемое имя'

Пример

Рассмотрим модель Article с заданным атрибутом verbose_name:

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=200)
  content = models.TextField()
  created_at = models.DateTimeField(auto_now_add=True)

  class Meta:
    verbose_name = 'статья'
    verbose_name_plural = 'статьи'

  def __str__(self):
    return self.title

В административном интерфейсе Django модель Article будет отображаться как "Статьи" в списке моделей, а при добавлении новой записи будет использоваться имя "статья".

Пример

Рассмотрим пример модели UserProfile с атрибутом verbose_name:

pythonfrom django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE)
  bio = models.TextField(blank=True)
  birth_date = models.DateField(null=True, blank=True)

  class Meta:
    verbose_name = 'профиль пользователя'
    verbose_name_plural = 'профили пользователей'

  def __str__(self):
    return f'Profile of {self.user.username}'

Теперь при обращении к экземпляру модели в административном интерфейсе будет отображаться заданное человекочитаемое имя:

pythonfrom myapp.models import UserProfile

profile = UserProfile.objects.first()
print(profile._meta.verbose_name)

Результат выполнения кода:

python"профиль пользователя"

Пример

Если не задать verbose_name, Django автоматически создаст имя на основе имени класса модели:

pythonfrom django.db import models

class Category(models.Model):
  name = models.CharField(max_length=100)

  class Meta:
    # verbose_name не задан
    pass

  def __str__(self):
    return self.name

В этом случае Django сгенерирует имя "Category" автоматически, преобразовав его в "category" для единственного числа и "categorys" для множественного (что не всегда корректно с точки зрения английского языка):

pythonfrom myapp.models import Category

category = Category()
print(category._meta.verbose_name)
print(category._meta.verbose_name_plural)

Результат выполнения кода:

python"category"
"categorys"

Как видно, автоматически сгенерированное множественное число может быть некорректным, поэтому рекомендуется всегда явно задавать атрибут verbose_name_plural вместе с verbose_name.

Смотрите также

  • атрибут verbose_name_plural,
    который задает человекочитаемое имя модели во множественном числе
  • атрибут db_table,
    который определяет имя таблицы в базе данных
  • атрибут ordering,
    который задает сортировку записей по умолчанию
  • атрибут abstract,
    который делает модель абстрактной