Мой вопрос очень похож на этого: Как я получаю доступ к объекту запроса или какой-либо другой переменной в чистой форме () метод?
Кроме, у меня есть та же проблема с администраторской формой. Таким образом, я не вижу путь к init форма сам, поэтому - для передачи запроса ему.
Спасибо заранее.
В классе ModelAdmin
есть несколько хуков, позволяющих вам делать такие вещи - посмотрите код в django.contrib.admin.options
.
Два метода, которые могут вам помочь, это ModelAdmin.save_form
и ModelAdmin.save_model
, оба они передают объект запроса. Таким образом, вы можете переопределить эти методы в своем подклассе Admin и сделать любую дополнительную обработку, которая вам нужна.
Отредактировано после комментария
Вы совершенно правы, что это не позволит вам проверить форму в зависимости от привилегий пользователя. К сожалению, инстанцирование формы зарыто глубоко внутри методов add_view
и change_view
в ModelAdmin
.
Существует не так много возможностей без дублирования большого количества существующего кода. Можно переопределить методы *_view
; можно попытаться переопределить функцию modelform_factory
, чтобы вернуть новый класс с уже записанным объектом запроса; можно попробовать поработать с методом класса формы __new__
, чтобы сделать то же самое, но это сложно из-за метакласса формы.