Django Admin: How to access the request object in admin.py, for list_display methods?

后端 未结 9 1723
太阳男子
太阳男子 2020-12-13 14:30

I\'ve added a method highlight_link to my model\'s admin.py class:

class RadioGridAdmin(admin.ModelAdmin):
    
    list_display = (\'start_time\         


        
9条回答
  •  甜味超标
    2020-12-13 15:11

    This is edited version of @user27478 answer, which uses thread-local vars:

    class RadioGridAdmin(admin.ModelAdmin):
        def __init__(self, model, admin_site):
            super().__init__(model, admin_site)
            self._request_local = threading.local()
    
        def changelist_view(self, request, extra_context=None):
            self._request_local.request = request
            return super().changelist_view(request, extra_context)
    
        @property
        def _request(self):
            return self._request_local.request
    
        def example_highlight_link(self, obj):
            changelist = self.get_changelist_instance(self._request)
            url = changelist.get_query_string(new_params={'key1': 1})
    

提交回复
热议问题