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