Вопрос о работе с файловыми полями в django и методе очистки

У меня есть довольно простая модель:

class Product(models.Model):
    data = models.JSONField()
    number = models.PositiveIntegerField()

который я могу обновлять через форму:

class ProductForm(forms.Form):
    def __init__(self, *args, **kwargs):
        product = kwargs.pop("product")
        super().__init__(*args, **kwargs)
        self.fields["number"] = forms.IntegerField()
        self.fields[product.data.keys()[0]] = forms.CharField()
        self.fields[product.data.keys()[1]] = forms.FileField()
            ...

     def clean(self):
         cleaned_data = super().clean()
         print(cleaned_data.get("image")) ## prints None
         print(self.files) ## prints: 

все работает нормально, я помещаю форму в шаблон с установленным атрибутом enctype="multipart/form-data" и затем получаю форму в моем TemplateView:

class ProductUpdateView(TemplateView):
    template_name = "update_product.html"

    def post(self, request, *args, **kwargs):
        obj = Product.objects.get(pk = kwargs["pk"])
        print(request.FILES) ## prints the correct filename!
        form = ProductForm(request.POST or None, product = obj)
        for key in request.POST.keys():
            ...
        obj.save()
        context = {'product': obj}
        return render(request, self.template_name, context)

Почему self.files печатает None, также cleaned_data.get("image") печатает <MultiValueDict: {}>, но в представлении request.FILES правильно знает о <MultiValueDict: {'image': [<InMemoryUploadedFile: test.png (image/png)>]}>?

В представлении необходимо правильно использовать форму и построить ее с помощью:

ProductForm(request.POST, request.FILES, product=obj)
Вернуться на верх