Обработка двух форм в одном Class Based View (DetailView) в Django

Рейтинг: 0Ответов: 1Опубликовано: 28.02.2023

Имеется страница товара.Логика обрабатывается при помощи DetailView. В этом классе уже обрабатывается форма корзины с помощью атрибута form_class из FormMixin. Теперь хочу на этой же страницу добавить форму для добовления комментариев. Вопрос: как с помощью DetailView добавить обработку второй формы комментариев CommentModelForm?

view.py

class ProductDetailView(FormMixin, DetailView):
    model = Product
    template_name = 'products/detail_product.html'
    pk_url_kwarg = 'product_id'
    slug_url_kwarg = 'product_slug'
    context_object_name = 'product'
    form_class = CartAddProductForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        product = get_object_or_404(Product, slug=self.kwargs['product_slug'], pk=self.kwargs['product_id'])
        comments = Comment.objects.filter(product=product, active=True)
        context['attributes'] = product.attributes
        context['cart_form'] = self.form_class
        context['comments'] = comments
        return context

Ответы

▲ 0

Не работал с DetailView, но я бы попробовал так:

class ProductDetailView(FormMixin, DetailView):
model = Product
template_name = 'products/detail_product.html'
pk_url_kwarg = 'product_id'
slug_url_kwarg = 'product_slug'
context_object_name = 'product'
form_class = CartAddProductForm

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    product = get_object_or_404(Product, slug=self.kwargs['product_slug'], pk=self.kwargs['product_id'])
    comments = Comment.objects.filter(product=product, active=True)
    context['attributes'] = product.attributes
    context['cart_form'] = self.form_class
    context['comments'] = comments
    context['comment_form'] = CommentModelForm()
    return context

затем по имени comment_form вывел бы в шаблоне.