Получение url kwargs в представлениях, основанных на классах
Мне нужно получить значение пк, записанное в url в представлении, основанном на классе :
path('<int:pk>/data/', views.DataView.as_view(), name='data'),
Однако, что я видел повсюду, так это пк, полученный в определении методов, таких как get
или post
.
Я хочу иметь возможность использовать его для определения переменных моего класса, потому что мне нужно получить одно и то же значение из этого пк в каждом методе внутри моего класса, как показано ниже :
class DataView(ContextMixin, UpdateView):
pk = get_pk_from_url
...
value = ...
def get(self, request, *args, **kwargs):
value = self.value
# Do something with value
def post(self, request, *args, **kwargs):
value = self.value
# Do something with value
Во время написания этого вопроса у меня возникла идея, которая заключается в том, чтобы определить метод, который будет делать то, что мне нужно, а затем вызывать этот метод в других моих методах.
class DataView(ContextMixin, UpdateView):
def get_value(self):
self.pk = self.kwargs['script_id']
...
self.value = ...
def get(self, request, *args, **kwargs):
self.get_value()
value = self.value
# Do something with value
def post(self, request, *args, **kwargs):
self.get_value()
value = self.value
# Do something with value
Однако я не знаю, есть ли другой способ, поэтому я все еще хочу задать свой вопрос.
Надеюсь, это было понятно, заранее спасибо за помощь!
Благодаря комментарию Willem Van Onsem, я смог использовать метод setup
(doc здесь), чтобы определить все, что мне нужно было определить.
В итоге я получил что-то вроде этого :
class DataView(View):
def setup(self, request, *args, **kwargs):
self.pk = kwargs['pk']
...
self.value = ...
return super().setup(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
value = self.value
def post(self, request, *args, **kwargs):
value = self.value
Метод setup
вызывается перед get
и post
, атрибуты класса, объявленные в нем, могут быть использованы в других методах.