Атрибут verbose_name
Атрибут verbose_name определяется внутри внутреннего класса Meta модели Django. Он задает человекочитаемое имя модели в единственном числе, которое используется в административном интерфейсе, в сообщениях об ошибках и в других местах, где требуется отображать название модели для пользователя. Если атрибут не задан, Django автоматически генерирует имя на основе имени класса модели, заменяя заглавные буквы на пробелы.
Синтаксис
class Meta:
verbose_name = 'человекочитаемое имя'
Пример
Рассмотрим модель Article с заданным атрибутом verbose_name:
from 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:
from 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}'
Теперь при обращении к экземпляру модели в административном интерфейсе будет отображаться заданное человекочитаемое имя:
from myapp.models import UserProfile
profile = UserProfile.objects.first()
print(profile._meta.verbose_name)
Результат выполнения кода:
"профиль пользователя"
Пример
Если не задать verbose_name, Django автоматически создаст имя на основе имени класса модели:
from 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" для множественного (что не всегда корректно с точки зрения английского языка):
from myapp.models import Category
category = Category()
print(category._meta.verbose_name)
print(category._meta.verbose_name_plural)
Результат выполнения кода:
"category"
"categorys"
Как видно, автоматически сгенерированное множественное число может быть некорректным, поэтому рекомендуется всегда явно задавать атрибут verbose_name_plural вместе с verbose_name.
Смотрите также
-
атрибут
verbose_name_plural,
который задает человекочитаемое имя модели во множественном числе -
атрибут
db_table,
который определяет имя таблицы в базе данных -
атрибут
ordering,
который задает сортировку записей по умолчанию -
атрибут
abstract,
который делает модель абстрактной