Настройка и обработка 2 форм моделей с одним и тем же классом FormView

Я пытаюсь использовать один класс FormView для рендеринга и обработки двух связанных, но разных ModelForms. Одна из форм имеет FileInput в качестве одного из своих полей, и она не отправляется должным образом, когда я нажимаю соответствующую кнопку.

views.py

class MyView(LoginRequiredMixin, FormView):
    template_name = "tmp.html"
    http_method_names = ["get", "post"]
    login_url = "/to/login"
    form_class = AForm
    success_url = reverse_lazy("profile")

    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        prf = ModelA.objects.get(id=self.request.user.id)
        context["form_a"] = AForm(instance=prf)
        context["form_b"] = BForm(instance=None)
        return context


    def post(self, request, *args, **kwargs):
        if "submit_a" in request.POST:
            self.form_class = AForm
        if "submit_b" in request.POST:
            self.form_class = BForm
        return super().post(request, *args, **kwargs)


    def form_valid(self, form):
        if self.form_class == AForm:
            form.save()
        elif self.form_class == BForm:
            form.save()
        return super().form_valid(form)

Связанная forms.py для ModelA выглядит примерно так:

class AForm(ModelForm):
    img_field = ImageField(widget=FileInput)

Две проблемы, с которыми я сейчас сталкиваюсь:

Когда форма загружается и пользователь нажимает кнопку отправки с предыдущими данными, я получаю <ul class="errorlist"><li>img_field<ul class="errorlist"><li>This field is required.</li></ul></li></ul> когда я проверяю form.errors.

Когда пользователь выбирает изображение для загрузки и нажимает submit (submit_a), я получаю IntegrityError на колонке id (id пользователя), которая возвращает null. Я предполагаю, что поскольку я посылаю конкретный экземпляр пользователя в контекст формы через

prf = ModelA.objects.get(id=self.request.user.id)
context["form_a"] = AForm(instance=prf)

связанные данные пользователя (включая данные img_field), использованные для построения формы, будут доступны, когда форма будет отправлена.

Какие у меня есть варианты решения этих проблем?

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