Рубрики
Без рубрики

Исследование менеджера модели Django

Когда вы копаете, как работает Django, вы можете узнать несколько интересных вещей. Глядя на предоставленные … Теги с Python, Django.

Когда вы копаете, как работает Django, вы можете узнать несколько интересных вещей. Глядя на предоставленное описание операций с базой данных в Джангу, мы видим, что термин Менеджер появляется более одного раза. Менеджер – это интерфейс, через который предоставляются все операции запросов для ваших моделей. По крайней мере, один из этих интерфейсов существует для каждой модели, которую вы создаете. Сегодня мы узнаем, как создать нашего собственного пользовательского менеджера, который может быть полезен в реальном жизненном сценарии!

Создание пользовательского менеджера

Создание пользовательского менеджера позволит нам изменить поведение запроса, которое попадает в базу данных. В этом примере мы будем кодировать функциональность, которая вернет только Статьи У этого есть дата публикации ниже текущего времени. Использование этого интерфейса отличный, потому что вся фильтрация будет выполнена на уровне базы данных вместо памяти приложения.

Давайте представим, что у нас есть django Блог Приложение, которое имеет следующее Статья модель:

# blog/models.py
from django.db import models
from django.utils import timezone

class Article(db.Model):
    title = models.CharField(max_length=60)
    body = models.TextField()
    pub_date = models.DateTimeField(default=timezone.now)

pub_date Поле будет нашим фильтром. Мы могли бы создать некоторые фильтрацию на наших взглядах, но это не нужно! Давайте создадим пользовательский Издалманагеру класс следующим образом:

# blog/managers.py
from django.utils import timezone
from django.db import models

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super.get_queryset().filter(
            pub_date__lte=timezone.now(),
        )

Мы можем увидеть две вещи в фрагменте выше:

  • Мы объявляем новый класс Издалманагеру что наследует от модели. Менеджер С
  • Мы переопределяем Manager.get_QuerySet () Способ с:

    • Фильтр pub_date быть ниже или равно текущим времени.

Теперь, что у нас есть созданный простой менеджер, мы можем обновить нашу модель для его использования. Настало время изменить нашу модель следующим образом:

# blog/models.py
from django.db import models
from django.utils import timezone

from blog.managers import PublishedManager

class Article(db.Model):
    title = models.CharField(max_length=60)
    body = models.TextField()
    pub_date = models.DateTimeField(default=timezone.now)

    objects = models.Manager()
    pub_objects = PublishedManager()

Теперь мы можем извлечь наши модели объектов следующим образом:

Article.objects.all() # Will return all Article objects in the db.
Article.pub_objects.all() # Will return only articles that should be published!

Идеально! 🤩.

Оригинал: “https://dev.to/lukzmu/investigating-the-django-model-manager-2d34”