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