因此,你不会喜欢这个答案,部分是因为我尚未完成编写代码,部分是因为这需要大量工作。
当我自己遇到这个问题时,你需要做的是:
- 花大量时间阅读formset和model-formset代码以了解它们的工作原理(某些功能驻留在formset类上,而其中一些功能驻留在工厂函数中,这无济于事)他们)。在后续步骤中,你将需要此知识。
- 编写你自己的formset类,该类继承
baseInlineFormSet
并接受initial
。这里真正棘手的一点是,你必须重写__init__()
,并且必须确保调用它baseFormSet.__init__()
而不是使用直接父级或祖父母级__init__()(因为它们分别是baseInlineFormSet
和baseModelFormSet
,并且它们都不能处理初始数据)。 - 编写你自己的适当admin内联类的子类(在我的情况下是
TabularInline
),并重写其get_formset方法以返回inlineformset_factory()
使用自定义formset
类的结果。 - 在
ModelAdmin
具有内联的模型的实际子类上,重写add_view
和change_view
,并复制大部分代码,但有一个大变化:构建表单集所需的初始数据,并将其传递给自定义表单集(由你的表单集返回ModelAdmin
的get_formsets()
方法)。
我已经与Brian和Joseph进行了一些富有成效的聊天,以期为将来的Django版本进行改进。目前,模型表单集的工作方式使此问题变得比通常所要解决的麻烦多了,但是我想对它进行一些API清理非常简单。



