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