Добавление пользовательских запросов к менеджерам - это соглашение Django. Из документов Django в пользовательских менеджерах :
Добавление дополнительных методов Менеджера - это предпочтительный способ добавления функциональности «на уровне таблицы» к вашим моделям.
Если это ваше личное приложение, слово конвенции не имеет большого значения - на самом деле внутренняя кодовая база моей компании имеет несколько методов класса, которые, возможно, принадлежат к настраиваемому диспетчеру.
Однако, если вы пишете приложение, которое вы собираетесь поделиться с другими пользователями Django, они ожидают увидеть
findBy
в настраиваемом менеджере.Я не думаю, что проблемы с наследством, о которых вы говорите, слишком плохи. Если вы читаете пользовательские менеджеры и документы наследования модели , я не думаю, что вас поймают. Многословность записи
.objects
терпима, так же, как и когда мы выполняем запросы с использованиемXYZ.objects.get()
иXYZ.objects.all()
Вот несколько преимуществ использования методов менеджера, на мой взгляд:
- Согласованность API. Ваш метод
findBy
принадлежитget
,filter
,aggregate
и остальным. Хотите узнать, какие поисковые запросы вы можете сделать в менеджереXYZ.objects
? Это просто, когда вы можете заглядывать вdir(XYZ.objects)
.- Статические методы «загромождают» пространство имен экземпляров.
XYZ.findBy()
в порядке, но если вы определяете статический метод, вы также можете сделатьxyz.findBy()
. Выполнение поискаfindBy
на конкретном экземпляре действительно не имеет смысла.- СУХОЕ. Иногда вы можете использовать один и тот же менеджер на нескольких моделях.
Сказав все это, это зависит от вас. Я не знаю причины убийцы, почему вы не должны использовать статический метод. Вы взрослый, это ваш код, и если вы не хотите писать
findBy
в качестве метода менеджера, небо не будет падать;)Для дальнейшего чтения я Рекомендуйте блог Менеджеры против методов класса Джеймса Беннетта, менеджера выпуска Django.