Запрос не установлен __init__
представления. Действительно, он устанавливается функцией setup
:
def setup(self, request, *args, **kwargs):
"""Initialize attributes shared by all view methods."""
<b>self.request = request</b>
self.args = args
self.kwargs = kwargs
Эта настройка выполняется после View
объект построен. Действительно, если вы используете .as_view()
, он возвращает функцию, которая в основном является view
функцией :
def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
<b>self.setup(request, *args, **kwargs)</b>
if not hasattr(self, 'request'):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)
Таким образом, сначала создает self
(с self = cls(**initkwargs)
), а затем вызовет self.setup(request, *args, **kwargs)
, чтобы установить объект request
вместе с args
и kwargs
.
Если вам нужно что-то сделать после того, как установлен request
, вы можете переопределить метод setup
. Например:
class SomeView(DetailView):
def <b>setup</b>(self, *args, **kwargs):
super().setup(*args, **kwargs)
print(dir)