因此,您不会喜欢这个答案,部分是因为我尚未完成编写代码,另一部分是因为这需要大量工作。
当我自己遇到这个问题时,您需要做的是:
- 花大量时间阅读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清理来使其非常容易。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)