- Класс
Meta
в моделях:- Вложенный класс для определения метаданных модели.
- Опции:
db_table
: Имя таблицы в БД (по умолчанию:<app_label>_<model_name_lower>
).db_table = 'my_custom_table'
ordering
: Порядок сортировки по умолчанию дляQuerySet
.ordering = ['-created_at', 'name']
verbose_name
: Человекочитаемое имя модели в единственном числе.verbose_name = 'Моя модель'
verbose_name_plural
: Имя во множественном числе.verbose_name_plural = 'Мои модели'
unique_together
: Кортеж или список кортежей полей, комбинация которых должна быть уникальной.unique_together = [('field1', 'field2')]
(Старый способ, лучше использоватьUniqueConstraint
).indexes
: Список объектовmodels.Index
для создания индексов в БД.indexes = [models.Index(fields=['field1', '-field2'], name='my_index')]
constraints
: Список ограничений БД (например,models.UniqueConstraint
,models.CheckConstraint
).constraints = [ models.UniqueConstraint(fields=['field1', 'field2'], name='unique_field1_field2'), models.CheckConstraint(check=models.Q(age__gte=18), name='age_gte_18') ]
abstract = True
: Делает модель абстрактной (не создает таблицу в БД, используется для наследования общих полей/методов).proxy = True
: Делает модель прокси (использует таблицу родительской модели, но может иметь свои методы, менеджеры,Meta
опции).
- Пример
Meta
:# models.py from django.db import models class Article(models.Model): title = models.CharField(max_length=200) slug = models.SlugField(unique=True) published_date = models.DateTimeField(null=True, blank=True) # ... class Meta: db_table = 'news_articles' ordering = ['-published_date', 'title'] verbose_name = 'Статья' verbose_name_plural = 'Статьи' indexes = [ models.Index(fields=['slug']), ] def __str__(self): return self.title
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰