Django modelformset для обновления объектов с помощью пользовательского ввода

Возникли некоторые проблемы с пониманием обновления объектов с помощью model formset. Создание объектов не является проблемой, поскольку поток понятен. Обновление предопределенных объектов также не является проблемой, поскольку мы используем instance для передачи экземпляров. Однако возникает вопрос: как обновить объекты, которые пользователь вводит в поля набора форм модели?

Допустим, у меня есть какой-то фиктивный код:

модели:

class Product(models.Model):
    serial_number = Charfield()
    config = ForeignKey(Configuration)

class Configuration(models.Model):
    items = ManyToMany(Item)

формы:

class ProductFormset(forms.BaseModelFormSet):
    def __init__(self, *args, **kwargs):
        super(ProductFormset, self).__init__(*args, **kwargs)

        self.queryset = models.Product.objects.none()


class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = ["serial_number"]

ProductFormSet = modelformset_factory(Product, ProductForm, ProductFormset, min=1, extra=0)

Таким образом, всякий раз, когда пользователь вводит некоторые serial_number на странице создания, я могу использовать clean_data для обработки новых объектов и save(). Всякий раз, когда я использую объект DetailView для перенаправления на ссылку обновления, я могу передать объект id и использовать его для назначения как instance, и все работает нормально для save(). Но на странице обновления я хочу, чтобы пользователь сам решал, какие продукты редактировать. Таким образом, пока форма не отправлена, serial_number неизвестны и не могут использоваться в качестве исходных. Набор форм is_valid() возвращает False, а также поле с ошибкой Object already exists. Я также использую JS для динамического добавления новых форм с использованием formset.empty_form. В настоящее время я переключился на обычный набор форм, но мне кажется, что это неправильно, так как я должен выполнять все проверки вручную (например, проверять, существует ли объект в базе данных). Чего мне не хватает?

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