Получение 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, атрибуты класса, объявленные в нем, могут быть использованы в других методах.

Вернуться на верх