У многих моих моделей есть внешний ключ для модели "Компания". Каждый вошедший в систему пользователь может быть частью одной или нескольких компаний (Пользователь m2m Company, не нуль).
Мне бы хотелось, чтобы у текущего пользователя-администратора были надеты «Очки компании», то есть список выбора, на странице индекса администратора или, возможно, в базовом заголовке, где они могут переключать свою «текущую» компанию. Для этого следует автоматически применить фильтр «Компания равна» - для моделей, имеющих внешний ключ к Компании, - в дополнение к любым другим фильтрам.
Какой лучший способ добиться этого?
NB. Это удобная функция для интерфейса администратора, на данном этапе защита моделей не требуется (это необходимо для клиентских представлений, но я могу просто использовать собственный менеджер и поиск через request.user).
Моя текущая идея:
Сохранить текущую компанию в сеансе.
Используйте промежуточное ПО для поиска текущей компании из сеанса и добавления компании ко всем соответствующим ссылкам:
a) список изменений: (? / &) "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, который нуждается в нем / имеет внешний ключ?