Django Admin: Как получить доступ к объекту запроса в admin.py для list_display методов?

FORCE_SCRIPT_NAME='/app/'

Добавьте это в settings.py и перезапустите Django. Значение должно соответствовать записи местоположения в nginx, чтобы работать правильно.

21
задан Erik 7 April 2009 в 23:10
поделиться

4 ответа

Я попробовал другие ответы, оставленные здесь, и столкнулся с проблемами, которые для меня становились сложными. Я поиграл с def __call __ () и придумал следующее. Вероятно, это неправильный способ сделать это, но он работает ...

возьмите здесь переменную GET (все в пределах класса RadioGridAdmin, как описано выше в моем первоначальном посте):

def __call__(self, request, url):
     global start_date
     start_date = request.GET['param']

     return super(RadioGridAdmin, self).__call__(request, url)

и, поскольку он глобальный, вы можете Теперь зайдите сюда:

def highlight_link(self):
    # access start_date here
0
ответ дан 29 November 2019 в 20:51
поделиться
class RadioGridAdmin(admin.ModelAdmin):

    def highlight_link(self, obj):
        return (self.param)

   def changelist_view(self, request, extra_context=None):
        self.param = request.GET['param']
        return super(RadioGridAdmin,self).changelist_view(request, extra_context=extra_context)
16
ответ дан 29 November 2019 в 20:51
поделиться

Никакого прямого способа выполнить это. Я вижу 2 возможных решения.

  • Используйте хранилище местных жителей потока для того же объекта запроса

    from django.utils._threading_local import locals
    
    globals = locals()
    
    class RadioGridAdmin(admin.ModelAdmin):
      def __call__(self, request, *args, **kwargs):
          globals['radio_grid_admin_request'] = request
          return super(RadioGridAdmin, self).__call__(request, *args, **kwargs)
    
      def highlight_link(self):
          request = globals['radio_grid_admin_request']
          # request.GET processing
          return ('some custom link')
    
  • При использовании простой нерезьбовой установки Django, возможно сохранить объект запроса так же, как атрибут:

    class RadioGridAdmin(admin.ModelAdmin):
      def __call__(self, request, *args, **kwargs):
          self.request = request
          return super(RadioGridAdmin, self).__call__(request, *args, **kwargs)
    
      def highlight_link(self):
          # self.request.GET processing
          return ('some custom link')
    
3
ответ дан 29 November 2019 в 20:51
поделиться

Что не так с этим:

def highlight_link(self, request):
    # access start_date here
-2
ответ дан 29 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: