зарегистрировать это - скажем - для всех форм в проекте?
гих моих моделей есть внешний ключ к модели "Компания". Каждый вошедший в систему пользователь может быть частью одной или нескольких компаний (Пользователь m2m Company, а не null).
Мне бы хотелось, чтобы у текущего пользователя-администратора были надеты «Очки компании», то есть список выбора, на странице индекса администратора или, возможно, в базовом заголовке, где они могут переключать свою «текущую» компанию. Для этого следует автоматически применить фильтр «Компания равняется» - для моделей, имеющих внешний ключ к Компании - в дополнение к любым другим фильтрам.
Какой лучший способ достичь этого?
NB: Это подразумевается как удобная функция для интерфейса администратора, на данном этапе не требуется фактическая защита моделей (это необходимо для представлений клиентов, но я могу просто использовать собственный менеджер и поиск там через request.user).
Моя текущая идея:
Сохраните текущую компанию в сессии.
Используйте промежуточное ПО для поиска текущей компании из сеанса и добавьте компанию во все соответствующие ссылки:
a) change_list: (? / &) "company__eq = 42"
b) change_view "add? company = 42" для моделей, имеющих внешний ключ для Company.
Для этого может потребоваться отменить или сопоставить шаблон URL-адреса, чтобы узнать их модель и проверить ее на наличие внешнего ключа (или я мог бы подготовить этот список заранее для повышения производительности).
Включайте в каждую форму ModelAdmin поле внешнего ключа, но скрывайте его с помощью CSS, чтобы в add_view («new») добавлялось предварительно заданное значение внешнего ключа из ссылки без упоминания о нем.
Считаете ли вы это жизнеспособным подходом?
Еслиhttp://code.djangoproject.com/ticket/10761 был реализован, я думаю, я мог бы просто указать собственный набор запросов, который читает текущую компанию из request.session и покончить с этим. Может быть, лучше вместо этого ускорить (= сделать и отправить патч) этот билет?
РЕДАКТИРОВАТЬ: или, может быть, просто переопределить метод queryset () на каждом ModelAdmin, который нуждается в этом / имеет внешний ключ?