LINUX.ORG.RU

self.переменная внутри метода

 , ,


0

2

Читаю документацию на Django c таким примером:

class PublisherBookList(ListView):

    template_name = 'books/books_by_publisher.html'

    def get_queryset(self):
        self.publisher = get_object_or_404(Publisher, name=self.kwargs['publisher'])
        return Book.objects.filter(publisher=self.publisher)

Вопрос - зачем они заводят атрибут класса self.publisher, кода можно было бы просто использовать локальную переменную внутри метода?

★★★★★

В джанге принято такое

class PublisherBookList(ListView):

    template_name = 'books/books_by_publisher.html'

    def get_queryset(self):
        self.publisher = get_object_or_404(Publisher, name=self.kwargs['publisher'])
        return Book.objects.filter(publisher=self.publisher)

    # тупо пример
    def another_method(self):
        ...
        self.publisher.name = 'qwerty'
        self.publisher.save()
        ...
anonymous ()

Всем спасибо, а мне спать надо больше - там дальше идет пример с повторным использованием:

def get_context_data(self, **kwargs):
    # Call the base implementation first to get a context
    context = super().get_context_data(**kwargs)
    # Add in the publisher
    context['publisher'] = self.publisher
    return context
Turbid ★★★★★ ()
Ответ на: комментарий от hippi90

можно и понадеяться на кеш. особенно если уверен, что он будет правильно настроен. но если ты точно знаешь, что этот объект может повторно понадобиться в пределах этого же запроса в этом же view, то лучше всё таки сохранить его в самом view, для этого class-based views и существуют

eternal_sorrow ★★★★★ ()