Django: доступ к пользовательской информации из admin.py для методов без объекта запроса? - PullRequest
0 голосов
/ 12 ноября 2018

Джанго 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 данные в этом случае? Я не нашел ничего релевантного в self или my_object

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Вы можете установить некоторые значения, которые могут потребоваться в ваших пользовательских методах, связанных с запросом пользователя в методе 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)
0 голосов
/ 12 ноября 2018

Самый простой способ получить доступ к текущему запросу - использовать 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:
...