Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

2.10 Мета-классы
6 из 6 шагов пройдено

unique_together

Опция unique_together в Meta классе модели Django позволяет указать набор полей, которые должны быть уникальными вместе. Это означает, что никакие два экземпляра вашей модели не могут иметь одинаковые значения в полях, указанных в файлах unique_together.

В Django вы можете указать уникальные поля вместе, предоставив список кортежей имен полей в опции unique_together. Каждый кортеж представляет набор полей, которые вместе должны быть уникальными.

Вот пример использования unique_together опции:

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateField()

    class Meta:
        unique_together = [
            ['name', 'date'],
        ]

В этом примере модель MyModel имеет два поля name и date. Параметр unique_together установлен в список с одним кортежем, который определяет набор полей, которые должны быть уникальными вместе. Это означает, что никакие два экземпляра не MyModel могут иметь одинаковые значения name и date.

 

index_together

Опция index_together в Meta классе модели Django позволяет указать набор полей, для которых должен быть создан индекс базы данных. Индекс — это структура оптимизации базы данных, которая позволяет быстрее извлекать данные.

В Django вы можете указать поля, которые должны быть проиндексированы вместе, предоставив список кортежей имен полей в опции index_together. Каждый кортеж представляет собой набор полей, которые должны индексироваться вместе.

Вот пример использования index_together опции:

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateField()

    class Meta:
        index_together = [
            ['name', 'date'],
        ]

В этом примере модель MyModel имеет два поля name и date. Параметр index_together установлен в список с одним кортежем, который определяет набор полей, которые должны быть проиндексированы вместе c name Это означает, что для полей и будет создан единый индекс базы данных date, что позволит быстрее извлекать данные при поиске записей с конкретными значениями name и date.

 

constraints

Параметр constraints в Meta классе модели Django позволяет указать ограничения, которые должны применяться к полям в модели. Ограничения в Django гарантируют выполнение определенных условий для данных, хранящихся в базе данных.

Вы можете указать ограничения, предоставив список экземпляров django.db.models.CheckConstraint в constraints опции. Каждый экземпляр определяет одно ограничение.

Вот пример использования constraints опции:

from django.db import models
from django.core.exceptions import ValidationError


class MyModel(models.Model):
    name = models.CharField(max_length=100)
    value = models.IntegerField()

    class Meta:
        constraints = [
            models.CheckConstraint(check=models.Q(value__gt=0), name='value_positive'),
        ]

В этом примере модель MyModel имеет два поля name и value. Параметр constraints установлен в список с одним экземпляром CheckConstraint, который определяет ограничение, которое value должно быть больше 0. Это ограничение будет применяться к полю value в базе данных, и любая попытка сохранить запись с отрицательным value результатом приведет к ошибке ValidationError.

 

verbose_name

Параметр verbose_name в Meta классе модели Django позволяет указать удобочитаемое имя модели, которое используется в различных местах фреймворка Django, например, в административном интерфейсе или в сообщениях об ошибках. По умолчанию подробное имя модели представляет собой версию имени модели, написанную с заглавной буквы.

Вот пример использования verbose_name опции:

from django.db import models


class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()

    class Meta:
        verbose_name = 'My Book'

В этом примере модель Book имеет три поля: titleauthor, и publication_date. Для параметра verbose_name установлено значение 'My Book', которое будет использоваться в качестве удобочитаемого имени модели в различных местах фреймворка Django. Например, если вы используете интерфейс администрирования Django, вы увидите My Book имя модели вместо Book.

 

verbose_name_plural

Параметр verbose_name_plural в классе модели Django Meta используется для указания формы множественного числа удобочитаемого имени модели. Это имя используется в различных местах среды Django, например, в административном интерфейсе или в сообщениях об ошибках.

Вот пример использования verbose_name_plural опции:

from django.db import models


class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()

    class Meta:
        verbose_name = 'My Book'
        verbose_name_plural = 'My Books'

В этом примере модель Book имеет три поля: titleauthor и publication_date. Параметр verbose_name установлен на 'My Book', а verbose_name_plural параметр установлен на 'My Books'. Эти имена будут использоваться в качестве удобочитаемых имен для модели и ее экземпляров в различных местах фреймворка Django. Например, если вы используете интерфейс администрирования Django, вы увидите My Books имя коллекции экземпляров модели Book, а не Books.

 

readonly_fields

В Django Meta класс используется для указания дополнительных параметров модели Django. Атрибут readonly_fields класса Meta — это список полей, которые должны отображаться только для чтения в административном интерфейсе Django. Эти поля нельзя редактировать непосредственно в интерфейсе администратора.

Например:

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()

    class Meta:
        readonly_fields = ['publication_date']

В этом примере publication_date поле будет отображаться как доступное только для чтения в административном интерфейсе Django, что означает, что его нельзя редактировать напрямую.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий
Нет обсуждений. Начните первое.