Django:从admin.py访问用户信息以获取没有请求对象的方法?

时间:2018-11-12 18:33:01

标签: django request admin subclass

Django 1.11。

admin.py中,我有:

class AuditAdmin(DeactivateMixin, admin.ModelAdmin):
   """all the superclass stuff"""

使用各种自定义方法从中将模型的内容归类为

class SomeModelAdmin(AuditAdmin):
    list_display = ["filed1", "filed2", "field3"] 

    def get_queryset(self, request):
        if request.user.is_superuser: 
            #do something extra

    def inline_add_somemodelattribute1(self, my_object):
        #how to access user if I don't have request ?

因此,在inline_add_somemodelattribute1方法中,我需要根据用户做出决定,但是该方法不以request作为参数。在这种情况下,如何获取我的user数据?我在selfmy_object

中找不到任何相关内容

谢谢

2 个答案:

答案 0 :(得分:1)

访问当前请求的最简单方法是使用crequest。您可以像这样使用它:

from crequest.middleware import CrequestMiddleware

class SomeModelAdmin(...):
     ...

     def inline_add_somemodelattribute1(self, my_object):
          crequest = CrequestMiddleware.get_request()
          # your logics here for example: if crequest.user.pk == 1:

答案 1 :(得分:0)

您可以考虑将changelist_view方法中与请求用户相关的自定义方法中可能需要的一些值设置为:

def changelist_view(self, request, extra_context=None):
    # setting is_superuser attribute to be used in custom methods.
    setattr(self, 'is_superuser', request.user.is_superuser)

    return super().changelist_view(request, extra_context)