Получить объекты с текущего сайта без настроек. SITE_ID - PullRequest
0 голосов
/ 03 мая 2018

Я ищу ту же функциональность, что и CurrentSiteManager, но без необходимости указывать SITE_ID в settings.py как для CurrentSiteManager требуется . Информация о текущем сайте должна исходить из запроса. Моя проблема заключается в создании собственного менеджера, но я что-то упускаю? Что было бы хорошим способом сделать это? Кажется довольно тривиальным, что CurrentSiteManager должен обеспечить эту функциональность. Имеет ли смысл отправлять запрос на добавление функции?

1 Ответ

0 голосов
/ 04 мая 2018

Вы пишете:

Информация о текущем сайте должна исходить из запроса.

Здесь есть большое предположение, что у менеджера всегда будет доступен контекст запроса.

Это не предположение, которое может сделать Django: любой универсальный менеджер моделей должен работать вне контекста запроса, потому что есть все виды случаев, когда контекст запроса недоступен - например, команды управления, миграции, задачи, и т. д. Даже если вы находитесь в контексте запроса, ваш менеджер не знает об этом, если вы явно не передаете его какому-либо методу менеджера (т. е. вам нужны эти методы для принятия аргумента request). Вот почему CurrentSiteManager требует SITE_ID:

CurrentSiteManager можно использовать только в том случае, если в ваших настройках задано значение SITE_ID.

Если вы хотите фильтровать объекты в контексте запроса, то Django предоставляет CurrentSiteMiddleware для добавления текущего сайта ко всем запросам. В ваших представлениях вы можете фильтровать объекты на этом site.

Существуют примеры проектов, в которых реализован пользовательский CurrentSiteManager, который выполняет то, что вы просите, - то, что приходит на ум, это Мезонин , который вы можете позаимствовать у (обратите внимание, что он включает в себя возиться с локальными потоками и все еще требует возврата к настройке SITE_ID.

...