Form.is_valid() на templateview в случае создания

У меня есть Product, который выглядит следующим образом:

class Product(models.Model):
    data = models.JSONField()
    number = models.PositiveIntegerField()
    store = models.ForeignKey(Store, on_delete = models.CASCADE)

и я создаю форму динамически, которую я заполняю значениями из базы данных в случае обновления следующим образом:

class ProductUpdateView(TemplateView):

    def post(self, request, *args, **kwargs):
        obj = Product.objects.get(pk = kwargs["pk"])
        form = ProductForm(request.POST or None, request.FILES, product = obj)

        if form.is_valid():
            for key in form.cleaned_data: 
                ...

пока все хорошо, я могу использовать метод форм clean таким образом для проверки данных и сохранения обновленных данных.

Но теперь о случае create: сначала я создаю пустую форму (это работает хорошо) и ввожу некоторые данные, затем я публикую их:

class ProductCreateView(TemplateView):
    template_name = "store/new_product.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        store = Store.objects.get(user = self.request.user)
        tmp_product = Product.objects.filter(store = store).last()

        product_data = {"number": tmp_product.number + 1}
        for key, value in tmp_product.data.items():
            product_data[key] = None

        context["form"] = ProductForm(product = tmp_product, initial = product_data)
        return context

    def post(self, request, *args, **kwargs):
        obj = Product.objects.create(number = request.POST["number"], data = {})

        form = ProductForm(request.POST, request.FILES, product = obj)
        if form.is_valid() ...

В приведенном выше ProductCreateView метод get_context_data() работает хорошо. Но в методе post() результат form.is_valid() из ProductForm показывает:

def clean(self):
    cleaned_data = super().clean()
    print(cleaned_data)

просто: {'number': 17} для request.POST, который выглядит как: <QueryDict: {'number': ['17'], 'name': ['testname'], 'price': ['1.99'], ...}> почему не все из request.POST в cleaned_data форме, как в случае с обновлением?

Еще одно наблюдение, которое я сделал, пытаясь отладить:

request.POST для случая обновления/создания:

<QueryDict: {'number': ['5'], 'name': ['testfield'], 'price': ['15.24']}> ## update case
<QueryDict: {'number': ['17'], 'name': ['another'], 'price': ['2']}> ## create case

очищенные данные из clean():

{'number': 17} ## update case
{'number': 5, 'name': 'testfield', 'price': Decimal('15.24')} ## create case

но self.data в clean() методе:

<QueryDict: {'number': ['5'], 'name': ['testfield'], 'price': ['15.24']}> ## update
<QueryDict: {'number': ['17'], 'name': ['another'], 'price': ['15.24']}> ## create
Вернуться на верх