Мета-класс в моделях 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
в базе данных.
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"