Как подключить админку для получения контекста запроса?

В Django - переопределение get_form для настройки форм администратора на основе запроса проблема заключается в том, чтобы выбрать другую форму на основе разрешений пользователь в объекте запроса, подключив метод get_form ().

Я хотел бы действительно вызвать метод объекта во время итерации, который использует контекст запроса для вывода некоторой информации.

В списках четыре способа зацепить отображение формы.

Но сигнатуры функций не включают объект запроса. Если бы они это сделали, вы могли бы написать что-то вроде (обратите внимание, что request на самом деле не аргумент):

class CustomAdmin(admin.ModelAdmin):
    list_display       = [ 'name', 'user_specific', ]
    #
    def user_specific(self, obj, request):
        return obj.func1(request)
    #
    output.short_description = 'UserSpecific'

Переопределение get_form() не было бы потокобезопасным, если бы оно использовалось для хранения состояния ... Итак, что было бы лучше всего?


person Traveler    schedule 12.05.2011    source источник
comment
Размышляя над этим, я ожидаю, что кто-то укажет, что пользовательская информация должна быть помещена в модель с помощью ForeignKey. Этот рефакторинг применим не всегда.   -  person Traveler    schedule 12.05.2011


Ответы (1)


В вашем случае, я считаю, что, возможно, написать свое собственное представление - лучший выбор, чем взломать сайт администратора django.

Но если вы настаиваете, вы можете переопределить changelist_view и записать запрос.

class CustomAdmin(admin.ModelAdmin):
    list_display       = [ 'name', 'user_specific', ]

    def changelist_view(self, request, extra_context=None):
        self.request = request
        return super(admin.ModelAdmin, self).changelist_view(self, request, extra_context)

    def user_specific(self, obj):
        return obj.func1(self.request)

    output.short_description = 'UserSpecific'
person ablmf    schedule 12.05.2011
comment
Спасибо, это работает (если вы удалите избыточный аргумент self для связанной ссылки). Наверное, это небезопасно для потоков, правда? - person Traveler; 13.05.2011