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.
В настоящее время я переключился на обычный набор форм, но мне кажется, что это неправильно, так как я должен выполнять все проверки вручную (например, проверять, существует ли объект в базе данных).
Чего мне не хватает?