gpt4 book ai didi

django - 如何在ModelAdmin中使用InlinePanel?

转载 作者:行者123 更新时间:2023-12-02 15:15:39 27 4
gpt4 key购买 nike

我正在设置一个需要使用多个子模型实例创建的模型。我希望能够在管理界面中编辑和创建此模型,因此我使用 ModelAdmin 添加它。根据documentation我应该能够根据正常的 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....

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

关于django - 如何在ModelAdmin中使用InlinePanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42299519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com