зарегистрировать это - скажем - для всех форм в проекте?

гих моих моделей есть внешний ключ к модели "Компания". Каждый вошедший в систему пользователь может быть частью одной или нескольких компаний (Пользователь 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, который нуждается в этом / имеет внешний ключ?

Ответы на вопрос(0)

Ваш ответ на вопрос