Метакласс в моделях — Django

от автора

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 не обойтись, посмотрим на реализации в известных библиотеках.


ссылка на оригинал статьи https://habr.com/ru/articles/692124/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *