Аттитюды "исчезают" из CBV. Джанго

Я пытаюсь построить CBV с классом View parent. Это представление берет slug объекта и находит этот объект между двумя моделями django. Функции из services.py делали много запросов к БД, поэтому я попытался уменьшить их количество, передав FeedbackSection необходимые атрибуты (slug, model_instance и context) и в последнее время переопределяя их в методе get.

class FeedbackSection(View):
    """
    Feedback section for different objects.

    This is something like 'generic' view, so I implement it that it will find
    the model and feedbacks for this model by having only slug.
    """

    template_name = 'feedbacks/feedback-section.html'
    form_class = CreateFeedbackForm
    slug = None
    model_instance = None
    context = None

    def get(self, request, *args, **kwargs):
        self.slug = kwargs.get('slug')
        self.model_instance = get_model_instance(self.slug)
        self.context = get_feedback_section_context(self.slug, self.form_class, self.model_instance)
        return render(request, self.template_name, self.context)

    @method_decorator(login_required)
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            # will create feedback object and update model[Advert, Company] rating.
            end_feedback_post_logic(self.request.user, form, self.model_instance)
        return render(request, self.template_name, self.context)

Атрибуты (slug, model_instance и context), когда post метод находится в runtime эквивалентны None. Проблема в том, что вчера эта реализация работала нормально, а сегодня нет.

Я знаю, что могу снова использовать свои функции, но в пост-методе. Я не хочу этого делать. Потому что это увеличит количество запросов к БД в два раза.

Нам нужно переопределить метод setup класса View и определить там эти атрибуты.

def setup(self, request, *args, **kwargs):
    self.slug = kwargs.get('slug')
    self.model_instance = get_model_instance(self.slug)
    self.context = get_feedback_section_context(
        self.slug,
        self.form_class,
        self.model_instance
    )
    return super().setup(request, *args, **kwargs)
Вернуться на верх