Django: метод пользовательского менеджера Метод VS-модели для переопределения create? [Дубликат]

24
задан Xerion 2 May 2015 в 23:44
поделиться

1 ответ

Добавление пользовательских запросов к менеджерам - это соглашение Django. Из документов Django в пользовательских менеджерах :

Добавление дополнительных методов Менеджера - это предпочтительный способ добавления функциональности «на уровне таблицы» к вашим моделям.

< / blockquote>

Если это ваше личное приложение, слово конвенции не имеет большого значения - на самом деле внутренняя кодовая база моей компании имеет несколько методов класса, которые, возможно, принадлежат к настраиваемому диспетчеру.

Однако, если вы пишете приложение, которое вы собираетесь поделиться с другими пользователями Django, они ожидают увидеть findBy в настраиваемом менеджере.

Я не думаю, что проблемы с наследством, о которых вы говорите, слишком плохи. Если вы читаете пользовательские менеджеры и документы наследования модели , я не думаю, что вас поймают. Многословность записи .objects терпима, так же, как и когда мы выполняем запросы с использованием XYZ.objects.get() и XYZ.objects.all()

Вот несколько преимуществ использования методов менеджера, на мой взгляд:

  1. Согласованность API. Ваш метод findBy принадлежит get, filter, aggregate и остальным. Хотите узнать, какие поисковые запросы вы можете сделать в менеджере XYZ.objects? Это просто, когда вы можете заглядывать в dir(XYZ.objects).
  2. Статические методы «загромождают» пространство имен экземпляров. XYZ.findBy() в порядке, но если вы определяете статический метод, вы также можете сделать xyz.findBy(). Выполнение поиска findBy на конкретном экземпляре действительно не имеет смысла.
  3. СУХОЕ. Иногда вы можете использовать один и тот же менеджер на нескольких моделях.

Сказав все это, это зависит от вас. Я не знаю причины убийцы, почему вы не должны использовать статический метод. Вы взрослый, это ваш код, и если вы не хотите писать findBy в качестве метода менеджера, небо не будет падать;)

Для дальнейшего чтения я Рекомендуйте блог Менеджеры против методов класса Джеймса Беннетта, менеджера выпуска Django.

29
ответ дан Ghopper21 24 August 2018 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: