У меня есть модель со многими отношениями к другой модели.Они оба имеют связанные с ними формы, последний имеет набор форм.
class Foo(models.Model):
name = models.CharField(max_length=20)
bars = models.ManyToManyField("Bar",blank=True,null=True)
class Bar(models.Model):
name = models.CharField(max_length=20)
class FooForm(ModelForm):
class Meta:
model = Foo
class BarForm(ModelForm):
class Meta:
model = Bar
BarFormSet = modelformset_factory(Bar,form=BarForm,extra=2)
В моем представлении / шаблоне стандартный виджет ManyToManyField заменен набором форм.Таким образом, я должен вручную связать экземпляры Bar, указанные в этом наборе форм, с ManyToManyField от Foo.Я делаю это чистым методом Фу:
def clean(self,*arg,**kwargs):
cleaned_data = self.cleaned_data
# barSubFormInstance is the BarSubForm that is displayed in my view
if barFormSetInstance.is_valid():
barInstances = barFormSetInstance.save()
cleaned_data["bars"] = barInstances
return cleaned_data
Это почти работает.Проблема в том, что он устанавливает Foo.bars на набор измененных форм в наборе форм.Таким образом, если я добавлю один бар к своему foo, затем перезагрузлю форму и добавлю второй бар, foo получит только этот второй бар.* Метод save () возвращает экземпляры, которые были сохранены в базе данных.Если данные данного экземпляра не изменились в связанных данных, экземпляр не будет сохранен в базе данных и не будет включен в возвращаемое значение ...
Так что я понимаю, почемумой код не работаетЯ просто не знаю, что с этим делать.Что я могу передать в cleaned_data ["bars"], который будет добавлять новые измененные формы, но не удалять существующие?
Большое спасибо за вашу помощь.