如何在 ModelAdmin 中使用 InlinePanel?

How to use InlinePanel in ModelAdmin?

我正在设置一个模型,该模型需要使用多个子模型实例创建。我希望能够在管理界面中编辑和创建此模型,因此我使用 ModelAdmin. According to the documentation I should be able to specify the fields/panels in accordance to normal Page types; however, when I add a InlinePanel 添加它 我在相关字段名称上得到 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)

错误

Request URL: http://127.0.0.1:8000/admin/involvement/application/create/

Django Version: 1.10.5

Exception Type: KeyError

Exception Value: 'references'

Exception Location: /[APPFOLDER]/venv/lib/python3.6/site-packages/wagtail/wagtailadmin/edit_handlers.py in init, line 627

我无法确定我做错了什么。谁能指出我正确的方向?

Wagtail 依靠 django-modelcluster 库来允许将父模型和子模型作为一个单元在表单中处理。为此,基本应用程序模型必须继承自 modelcluster.models.ClusterableModel(Wagtail 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,
    )