如何在ModelAdmin中使用InlinePanel?

时间:2017-02-17 13:44:05

标签: django keyerror wagtail

我正在设置一个需要使用子模型的多个实例创建的模型。我希望能够在管理界面中编辑和创建此模型,因此我使用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行

我无法确定我做错了什么。任何人都可以指出我正确的方向吗?

1 个答案:

答案 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,
    )