简体   繁体   English

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

[英]Django: access to user info from admin.py for methods with no request object?

Django 1.11. Django 1.11。

In admin.py I have: admin.py我有:

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

from which I subclass my model's stuff with various custom methods: 从中,我使用各种自定义方法将模型的内容子类化:

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 ?

So inside inline_add_somemodelattribute1 method I need to make decision based on the user but that method does not take request as an argument. 因此,在inline_add_somemodelattribute1方法内部,我需要根据用户做出决定,但是该方法不将request作为参数。 How do I get my user data in this case? 在这种情况下,如何获取user数据? I did not find anything relevant in self or my_object 我在selfmy_object没有发现任何相关my_object

Thanks 谢谢

Easiest way of access current request is using crequest . 访问当前请求的最简单方法是使用crequest You can use it like this: 您可以像这样使用它:

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:

You may consider setting some values that you may require in your custom methods related to request user in changelist_view method as : 您可以考虑在与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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM