【发布时间】:2021-08-24 21:16:24
【问题描述】:
我正在尝试对具有外键(作为内联表单集管理)的对象在 Create 和 Update 之间进行某种混合。
更新表单中的父对象(及其相关的表单集表单)可以正常工作。我还可以将该父对象的副本保存为数据库中的新实例,效果很好。但是我似乎无法弄清楚如何将表单集的副本也制作为新的独立对象。
基本上,一旦一切都说完了,我想要:
- Foo (pk=1)
- bar_1
- bar_2 ...
- bar_n
- FooCopy (pk=2)
- bar_1_copy ...
- bar_n_copy
我目前可以修改 Foo,创建 FooCopy,以及将 bar_1 修改为 bar_n...但不能创建 bar_1_copy 等。
例如:
class SoumissionUpdateView(LoginRequiredMixin, SideBarMixin, UpdateView):
def form_valid(self, form, formset):
# that saves any modification to the initial object, as well as the elements in the formset
self.object = form.save()
formset.instance = self.object
formset.save()
# this saves the parent object as a new instance. However no new formset objects are created in the db.
self.object.pk = None
self.object.save()
formset.instance = self.object
formset.save() # since those should be 2 different sets of instance in db
return HttpResponseRedirect(self.get_success_url())
我的理解是因为第二次保存之前的表单集是指一个新实例,它应该将它们保存为新对象。但是它似乎没有保存任何东西(因为 formset,即使在第二次调用 formset.save() 之后,仍然引用原始父实例)。
关于我应该如何保存引用原始父级副本的独立表单集对象的任何建议?
【问题讨论】:
标签: django inline-formset