Django - это высокоуровневый веб-фреймворк Python, который способствует быстрой разработке и чистому, прагматичному дизайну. Созданный опытными программистами, он берет на себя большую часть хлопот, связанных с веб-разработкой, так что вы можете сосредоточиться на написании своего приложения без необходимости изобретать колесо. Он бесплатный и с открытым исходным кодом. Перед тем, как двигаться дальше, изучите модели Django.
Метамодель (Meta Model) - это, по сути, внутренний класс вашего класса модели. Метамодель в основном используется для изменения поведения полей вашей модели, таких как изменение опций заказа, verbose_name, и многих других параметров. Добавление класса Meta к вашей модели совершенно необязательно. Для того чтобы использовать метамодель, вы должны добавить класс Meta в вашу модель, как показано ниже:
class student(models.Model):
class Meta:
options........
Опции метамодели
Метамодель имеет множество опций, которые вы можете предоставить вашей модели в ее внутреннем классе meta
1. abstract
Если abstract = True, то данная модель будет абстрактным базовым классом:
class student(models.Model):
class Meta:
abstract = True
2. app_label
Если модель определена за пределами приложений в INSTALLED_APPS
, то ей необходимо объявить, какому приложению она принадлежит:
class student(models.Model):
class Meta:
app_label = 'myapp' # add app name here
3. verbose_name
verbose_name
- это по сути понятное человеку имя для вашей модели.
class student(models.Model):
class Meta:
verbose_name = "stu" # add verbose_name here
4. ordering
Ordering (упорядочивание) в основном используется для изменения порядка полей вашей модели.
class student(models.Model):
class Meta:
ordering = [-1]
Добавьте упорядочивание вот так [-1], и порядок изменится на убывающий.
5. proxy
Если мы добавим proxy = True, модель, которая является подклассом другой модели, будет рассматриваться как прокси-модель.
class Teacher(models.Model):
pass
class Student(Teacher):
class Meta:
proxy = True
Вот как мы можем создать прокси-модель.
6. permissions
Дополнительные permissions (разрешения), которые нужно внести в таблицу разрешений при создании этого объекта. Разрешения на добавление, изменение, удаление и просмотр автоматически создаются для каждой модели.
class student(models.Model):
class Meta:
permissions = []
Вы можете добавить дополнительные разрешения внутри списка.
7. db_table
Мы можем перезаписать имя таблицы, используя db_table в классе meta.
class student(models.Model):
class Meta:
db_table = 'X'
Это изменит имя таблицы на X.
8. get_latest_by
Возвращает последний объект в таблице на основе заданного поля, обычно используемого для DateField, DateTimeField или IntegerField.
class student(models.Model):
class Meta:
get_latest_by = "order_date"
Возвращает последний по порядку возрастания order_date
.
Методы класса (classmethod): нужны ли они? Об этом расскажем на бесплатном вебинаре, который пройдет уже 12 октября. Поговорим об особенностях ООП в python: о наследовании и миксинах, рассмотрим ситуации, когда без classmethod не обойтись, посмотрим на реализации в известных библиотеках.
MechanicZelenyy
В Python метакласс это конкретный термин и я всё-таки ожидал что разберут как работает метакласс
ModelBase
изclass Model(metaclass=ModelBase)
, а не будут копировать мануал.Astrohas
Кривой перевод статьи и содержимого. В оригинале заголовок статьи - "Класс Meta в моделях - Django".
Тоже ожидал разбора внутренней логики и магии.