The_Lars
@The_Lars

Использование нескольких форм в одном CBV?

На данный момент использую этот код:
Spoiler

class ProductPage(TemplateView):
    category_form_class = CategoryForm
    product_form_class = ProductForm

    template_name = 'personal_area/pages/products.html'

    def post(self, request):
        post_data = request.POST or None
        profile_id = request.user.id

        category_form = self.category_form_class(post_data, profile_id=profile_id, prefix='category')
        product_form = self.product_form_class(post_data, prefix='product')

        product_form.fields['category'].choices = user_category(request.user.id)

        context = self.get_context_data(
            category_form=category_form,
            product_form=product_form,

            product_list=Product.objects.filter(profile_id=request.user.id),
            category_list=Category.objects.filter(profile_id=request.user.id)
        )

        if category_form.is_valid():
            self.form_save(form=category_form, profile_id=profile_id)
        if product_form.is_valid():
            self.form_save(form=product_form, profile_id=profile_id)

        return self.render_to_response(context)

    @staticmethod
    def form_save(form, profile_id):
        form_commit = form.save(commit=False)
        form_commit.profile_id = profile_id
        form_commit.save()
        return form_commit

    def get(self, request, *args, **kwargs):
        return self.post(request)


Он работает. Однако, после отправки одной из форм, на другой форме срабатывает form.errors и выводит ошибки "name Обязательное поле." и т.д на все обязательные поля.
Как можно с этим бороться?
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
@bacon
Как можно с этим бороться?
не делать так

1. зачем form_save сделан staticmethod, больше похоже что не понимаете для чего
2. обычно одна форма - один view
3. для работы с формами есть FormView и если хочется несколько, но в один момент у вас обрабатывается одна форма, не используем form_class, а то переопределяем метод get_form_class или get_form
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы