如何在Django Admin中获取自定义方法的当前用户?

rea*_*act 1 python django django-admin

所以,我有这个代码

class PostAdmin(models.ModelAdmin):
    # ...
    def display_confirm_button(self, obj):
        # some code
    # ...
Run Code Online (Sandbox Code Playgroud)

如何在display_confirm_button方法中获取当前用户?

Ala*_*air 6

class PostAdmin(models.ModelAdmin):
    # ...
    def display_confirm_button(self, obj):
        # some code
    # ...
Run Code Online (Sandbox Code Playgroud)

要访问登录用户,您需要访问请求对象.display_confirm_button由于您只能访问obj正在编辑的对象,因此无法在您的方法中访问请求.

解决方案是覆盖get_list_display,它可以访问request对象.然后,您可以display_confirm_button 其中有权访问请求的内部 get_list_display,并display_confirm_button在您返回的列表中包含callable.

class MyModelAdmin(admin.ModelAdmin):
    def get_list_display(self, request):

        def display_confirm_button(obj):
            out = logic_that_requires_user(request.user)
            return out

        return ['field1', 'field2', display_confirm_button, ...]
Run Code Online (Sandbox Code Playgroud)