我正在设置一个需要使用子模型的多个实例创建的模型。我希望能够在管理界面中编辑和创建此模型,因此我使用ModelAdmin
添加它。根据{{3}},我应该能够根据正常Page
类型指定字段/面板;但是,当我添加documentation时,我会在相关字段名称上获得KeyError
。
models.py
class Application(models.Model):
# other fields....
panels = [MultiFieldPanel([
FieldPanel('applicant'),
FieldPanel('position'),
FieldPanel('cover_letter'),
FieldPanel('qualifications'),
InlinePanel('references'),
FieldPanel('draft'),
])]
class Reference(models.Model):
application = models.ForeignKey(
Application,
related_name='references',
on_delete=models.CASCADE,
blank=False,
)
# other fields....
wagtails_hooks.py
class ApplicationAdmin(ModelAdmin):
model = Application
menu_icon = 'mail'
menu_order = 400
list_display = # other fields....
modeladmin_register(ApplicationAdmin)
错误
请求网址:
InlinePanel
Django版本:1.10.5
异常类型:KeyError
异常值:'references'
异常位置:/ [APPFOLDER] / venv/lib/python3.6/site-packages/wagtail/wagtailadmin/edit_handlers.py 在 init ,第627行
我无法确定我做错了什么。任何人都可以指出我正确的方向吗?
答案 0 :(得分:6)
Wagtail依赖django-modelcluster库来允许父表和子模型作为单个单元在表单中处理。为此,基本应用程序模型必须从x = c(NA,1,2,3,NA,NA,5,6,7,NA,NA,NA)
zoo::na.locf(x, maxgap = 2, na.rm = FALSE)
继承(Wagtail modelcluster.models.ClusterableModel
模型将此作为标准)并且子模型必须由Page
而不是ParentalKey
链接ForeignKey
。
InlinePanel
中的子模型通常也是Orderable
的子类,因此可以对它们进行排序;我不记得这是绝对的要求,还是只是一个推荐。
from modelcluster.models import ClusterableModel
class Application(ClusterableModel):
# ...
class Reference(Orderable):
application = models.ParentalKey(
Application,
related_name='references',
on_delete=models.CASCADE,
blank=False,
)