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

Комментарии (2)


  1. MechanicZelenyy
    07.10.2022 17:11
    +10

    В Python метакласс это конкретный термин и я всё-таки ожидал что разберут как работает метакласс ModelBase из class Model(metaclass=ModelBase), а не будут копировать мануал.


    1. Astrohas
      09.10.2022 23:03

      Кривой перевод статьи и содержимого. В оригинале заголовок статьи - "Класс Meta в моделях - Django".

      Тоже ожидал разбора внутренней логики и магии.