- Мета-класс в моделях Django
- класс Мета в Django
- Django Meta Option — Аннотация
- Django Meta Option — db_table
- Django Meta Option — Заказ
- Django Meta Option — verbose_name
- Метаопция Django — Verbose_name_plural
- Сопутствующая статья — Django Model
- Метакласс в моделях — Django
- Опции метамодели
- 1. abstract
- 2. app_label
- 3. verbose_name
- 4. ordering
- 6. permissions
- 7. db_table
- 8. get_latest_by
Мета-класс в моделях Django
Метаданные относятся к определенному набору данных, который предоставляет информацию о других данных. В Django мы используем модели Django для разработки таблиц нашей базы данных и их полей. Если нам нужно добавить данные о самой модели, мы используем класс Meta . Подробнее о классе Meta в моделях Django читайте в этой статье.
класс Мета в Django
Класс Meta — это внутренний класс, то есть он определен внутри модели следующим образом:
from django.db import models class MyModel(models.Model): . class Meta: .
Класс Meta может использоваться для определения различных вещей о модели, таких как разрешения, имя базы данных, единственное и множественное число, абстракция, порядок и т. Д. Добавление классов Meta в модели Django совершенно необязательно.
Этот класс также имеет множество параметров, которые вы можете настроить. Ниже приведены некоторые из наиболее часто используемых мета-параметров; вы можете изучить все мета-варианты здесь
Django Meta Option — Аннотация
Эта опция используется, чтобы определить, является ли модель абстрактной или нет; они работают так же, как абстрактные классы. Абстрактные классы — это те, которые не могут быть созданы и могут быть только расширены или унаследованы.
Модели, заданные как абстрактные, могут быть только наследованы. Эту опцию можно использовать, если есть несколько моделей с общими полями.
from django.db import models class Human(models.Model): genders = ( ("M", "Male"), ("F", "Female"), ("NB", "Non-binary"), ("T", "Transgender"), ("I", "Intersex"), ("O", "Other"), ("PNTS", "Prefer not to say") ) name = models.CharField(max_length = 200) age = models.IntegerField(default = 0) gender = models.CharField(max_length = 50, choices = genders) class Meta: abstract = True # Important class Teacher(Human): subject = models.CharField(max_length = 200) class Student(Human): grade = models.IntegerField(default = 0)
Здесь модели Teacher и Student будут иметь все поля внутри модели Human . Внутри базы данных будут созданы только модели Teacher и Student .
Django Meta Option — db_table
Эта опция используется для установки имени, которое должно использоваться для идентификации таблицы в базе данных. Например: если я сделаю что-то следующее, имя моей модели будет job в базе данных.
from django.db import models class JobPosting(models.Model): class Meta: db_table = "job"
Django Meta Option — Заказ
Эта опция принимает список строковых значений, которые являются полями модели. Он используется для определения порядка объектов модели. Когда объекты этой модели будут извлечены, они будут представлены в этом порядке.
from django.db import models class JobPosting(models.Model): dateTimeOfPosting = models.DateTimeField(auto_now_add = True) class Meta: ordering = ["-dateTimeOfPosting"]
В приведенном выше примере извлеченные объекты будут упорядочены на основе поля dateTimeOfPosting в порядке убывания. (Префикс — используется для определения порядка убывания.)
Django Meta Option — verbose_name
Эта опция используется для определения удобочитаемого единственного имени модели и заменяет стандартное соглашение об именах Django. Это имя также отобразится в панели администратора ( /admin/ ).
from django.db import models class JobPosting(models.Model): class Meta: verbose_name = "Job Posting"
Метаопция Django — Verbose_name_plural
Этот параметр используется для определения удобочитаемого имени во множественном числе для модели, которое снова перезапишет стандартное соглашение об именах Django. Это имя также отобразится в панели администратора ( /admin/ ).
from django.db import models class JobPosting(models.Model): class Meta: verbose_name_plural = "Job Postings"
Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.
Сопутствующая статья — Django Model
Метакласс в моделях — 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], и порядок изменится на убывающий.
Если мы добавим 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 не обойтись, посмотрим на реализации в известных библиотеках.