我有一个名为Orderable
的{{1}}模型,在名为SetListItem
的{{1}}上有一个ParentalKey
。父ClusterableModel
模型定义使用FloorWithSets
来控制FloorWithSets
的添加/排序/删除。我遇到的问题是,管理表单会自动为每个InlinePanel
呈现三个空的SetListItem
,而我找不到任何方法来控制此设置。
SetListItem
类将parameters带到例如设置项目的最小和最大数量,但不设置要呈现的初始空项目的数量。
我在Wagtail文档中找不到与此有关的任何信息。我还为FloorWithSets
和InlinePanel
挖掘了source,但是找不到我可以覆盖的内容。
我确实从InlinePanel template file看到了一个隐藏的输入,其ID以InlinePanel
结尾,该输入通过EditHandler
呈现。此字段的值始终低于ID以-INITIAL_FORMS
结尾的相邻隐藏输入,这很有意义。我只是不知道价值来自何处或如何控制它。
我能找到的关于self.formset.management_form
的唯一信息似乎都与测试有关(例如this documentation),而且我看不到如何将所说的与我的需求联系起来。
-TOTAL_FORMS
答案 0 :(得分:1)
我想我已经找到了解决方案。尝试使用以下自定义元类为Form
模型创建自定义EventPage
类:
class EventPageFormMetaclass(WagtailAdminModelFormMetaclass):
@classmethod
def child_form(cls):
return EventPageForm
class EventPageForm(WagtailAdminPageForm, metaclass=EventPageFormMetaclass):
pass
class EventPage(Page):
# Whatever you have in your model
base_form_class = EventPageForm
我认为问题源于ClusterFormMetaclass
是hard-coded来为子模型创建ClusterForm
实例的事实。因此,您的EventPage
得到了WagtailAdminPageForm
,但是FloorWithSets
模型得到了ClusterForm
。如果您停在那里,就可以了,但是当FloorWithSets
生成它是内嵌面板时,它就像ClusterForm
那样做,其元类的extra_form_count
设置为3,与WagtailAdminPageForm
的元类将其设置为0相对。
因此,上述解决方案创建了一个新的Form
类,该类的元类将覆盖child_form
类方法,以返回Form
设置为0的extra_form_count
类。
哇。