Инициализация запроса в get_edit_handler в классе ModelAdmin в Wagtail
Я не могу инициализировать запрос в ModelAdmin. По умолчанию запрос в функции def get_edit_handler(self, instance, request)
имеет значение None. Как я могу сделать это, чтобы я мог получить доступ к запросу в функции, упомянутой выше? Например, для request.user.
class SomemodelAdmin(ModelAdmin):
model = Somemodel
list_display = ("field",)
edit_view_class = SaveContinueEditView
def get_edit_handler(self, instance, request):
print(request) #This prints None.
Предполагаю, что вы используете Wagtail 3.
Если вы хотите получить доступ к информации запроса, вам следует создать объект custom Form и выполнять свои request.user
действия в его методе __init__
. Мне кажется, что вы можете настроить это с помощью form_class = SomemodelForm
в классе SomemodelAdmin.
Для проверки разрешений следует использовать новую опцию разрешения на FieldPanel; для других настроек объекта формы на каждый запрос используйте пользовательский класс формы с переопределенным методом init. (Объект текущего пользователя доступен из формы как self.for_user.)
Для создания и редактирования представлений используйте:
class CreateView(ModelFormView):
class EditView(ModelFormView, InstanceSpecificView):
Что расширяет:
class ModelFormView(WMABaseView, FormView):
Так что вы можете настроить эти представления следующим образом:
class SomeCreateView(CreateView)
class SomeEditView(EditView)
И добавьте к ним "setup":
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
self.edit_handler = self.get_edit_handler(request)
Затем вы изменяете вид администрирования следующим образом:
class SomemodelAdmin(ModelAdmin, EditHandler):
create_view_class = SomeCreateView
edit_view_class = SomeEditView
Вкратце: Вы отменяете метод настройки в ModelFormView, предоставляя собственные представления в SomemodelAdmin