预填充内联FormSet?

预填充内联FormSet?,第1张

预填充内联FormSet?

因此,您不会喜欢这个答案,部分是因为我尚未完成编写代码,另一部分是因为这需要大量工作。

当我自己遇到这个问题时,您需要做的是:

  1. 花大量时间阅读formset和model-formset代码以了解它们的工作方式(某些功能驻留在formset类上,而另一些函数驻留在工厂函数中,这无济于事)他们)。在后续步骤中,您将需要此知识。
  2. 编写您自己的formset类,该类继承自
    baseInlineFormSet
    并接受
    initial
    。这里真正棘手的一点是,您 必须 重写
    __init__()
    ,并且 必须 确保调用它,
    baseFormSet.__init__()
    而不是使用直接父级或祖父母级
    __init__()
    (因为它们分别是
    baseInlineFormSet
    baseModelFormSet
    ,并且它们都不能处理初始数据)。
  3. 编写您自己的适当admin内联类的子类(在我的情况下是
    TabularInline
    ),并重写其
    get_formset
    方法以返回
    inlineformset_factory()
    使用自定义formset类的结果。
  4. ModelAdmin
    具有内联的模型的实际子类上,重写
    add_view
    change_view
    ,并复制大多数代码,但有一个大变化:构建表单集所需的初始数据,并将其传递给自定义表单集(由您的表单集返回
    ModelAdmin
    get_formsets()
    方法)。

我已经与Brian和Joseph进行了一些富有成效的聊天,以期为将来的Django版本进行改进。目前,模型表单集的工作方式使此问题变得比通常所要解决的麻烦多了,但是我认为可以通过进行一些API清理来使其非常容易。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5623867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存