Как указано в Документации :
с использованием нескольких менеджеров в одной модели. Вы можете прикрепить к модели столько экземпляров Manager()
, сколько захотите. Это неповторяющийся способ определения общих «фильтров» для ваших моделей.
Поскольку у вас всего одно действие, вам может быть трудно увидеть преимущества. Однако по мере того, как ваш код становится больше, скажите:
good = Book.objects.filter(author="PersonA", stars=5).order_by("-date_created").exclude(outdated=True)
normal = Book.objects.filter(author="PersonA", stars=3).order_by("-date_created").exclude(outdated=True)
bad = Book.objects.filter(author="PersonA", stars=1).order_by("-date_created").exclude(outdated=True)
Вы можете видеть, что это очень много кода. С менеджерами вы можете сделать что-то вроде этого:
class AuthorAManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(author="PersonA").order_by("-date_created").exclude(outdated=True)
class Book(models.Model):
# ...
author_a = AuthorAManager()
good = Book.author_a.filter(stars=5)
normal = Book.author_a.filter(stars=3)
bad = Book.author_a.filter(stars=1)
В целом, это может сделать ваш код намного чище и понятнее. Как вы сказали, вы не видите разницы прямо сейчас, поскольку вы не входили в сложные / повторяющиеся дескрипторы, но по мере расширения вашего проекта я бы сказал, что это стоит вложения.