如何在ModelAdmin中使用InlinePanel?

Dek*_*er1 2 django keyerror wagtail

我正在建立一个需要使用多个子模型实例创建的模型。我希望能够在管理界面中编辑和创建此模型,所以我要使用添加它ModelAdmin。根据文档,我应该能够根据常规Page类型指定字段/面板。但是,当我添加一个时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....
Run Code Online (Sandbox Code Playgroud)

wagtails_hooks.py

class ApplicationAdmin(ModelAdmin):
    model = Application
    menu_icon = 'mail'
    menu_order = 400
    list_display = # other fields....

modeladmin_register(ApplicationAdmin)
Run Code Online (Sandbox Code Playgroud)

错误

要求网址:http : //127.0.0.1 : 8000/admin/involvement/application/create/

Django版本:1.10.5

异常类型:KeyError

异常值:“引用”

异常位置:/[APPFOLDER]/venv/lib/python3.6/site-packages/wagtail/wagtailadmin/edit_handlers.py init,第627行

我无法确定自己做错了什么。有人能指出我正确的方向吗?

gas*_*man 7

Wagtail依靠django-modelcluster库来允许将父模型和子模型以表单的形式作为单个单元进行处理。为此,基础Application模型必须继承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,
    )
Run Code Online (Sandbox Code Playgroud)

  • 这看起来应该可以工作,但没有显示在 Wagtail ModelAdmin UI 中。 (2认同)