Инициализация запроса в 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

Вернуться на верх