Wagtail 的 InlinePanel 与非页面模型兼容吗?
Is Wagtail's InlinePanel Compatible w/ a Non Page Model?
我有一个 wagtail 非页面模型,我想使用 InlinePanel
以便我可以在父表单中内联编辑多个项目。
class Parent(ClusterableModel):
panels = [...,
InlinePanel('child_items')
]
class Child(Orderable):
value = models...
parent_value = ParentalKey('.Parent', on_delete=models.CASCADE, related_name='child_items')
但遗憾的是,wagtail 管理中未呈现内联面板 UI。
快速浏览一下代码,似乎 InlinePanel
需要一个页面 object/editor,所以我想在这里问一下是否有使用 [=11= 的方法] 在非页面对象上,或者是否有更好的方法在非页面对象的 wagtail 管理中实现对象的内联编辑(如 django 的 StackedInline
)。
InlinePanel
如果非页面模型注册为代码片段或通过 ModelAdmin,则它们确实适用于非页面模型。您的代码的工作版本是(在新创建的 Wagtail 项目上测试,home/models.py
替换为以下代码):
from django.db import models
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel
from wagtail.core.models import Page, Orderable
from wagtail.snippets.models import register_snippet
class HomePage(Page):
pass
@register_snippet
class Parent(ClusterableModel):
title = models.CharField(max_length=255)
panels = [
FieldPanel('title'),
InlinePanel('child_items', label='Child items'),
]
class Child(Orderable):
parent_value = ParentalKey(Parent, on_delete=models.CASCADE, related_name='child_items')
value = models.CharField(max_length=255)
panels = [
FieldPanel('value'),
]
我有一个 wagtail 非页面模型,我想使用 InlinePanel
以便我可以在父表单中内联编辑多个项目。
class Parent(ClusterableModel):
panels = [...,
InlinePanel('child_items')
]
class Child(Orderable):
value = models...
parent_value = ParentalKey('.Parent', on_delete=models.CASCADE, related_name='child_items')
但遗憾的是,wagtail 管理中未呈现内联面板 UI。
快速浏览一下代码,似乎 InlinePanel
需要一个页面 object/editor,所以我想在这里问一下是否有使用 [=11= 的方法] 在非页面对象上,或者是否有更好的方法在非页面对象的 wagtail 管理中实现对象的内联编辑(如 django 的 StackedInline
)。
InlinePanel
如果非页面模型注册为代码片段或通过 ModelAdmin,则它们确实适用于非页面模型。您的代码的工作版本是(在新创建的 Wagtail 项目上测试,home/models.py
替换为以下代码):
from django.db import models
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel
from wagtail.core.models import Page, Orderable
from wagtail.snippets.models import register_snippet
class HomePage(Page):
pass
@register_snippet
class Parent(ClusterableModel):
title = models.CharField(max_length=255)
panels = [
FieldPanel('title'),
InlinePanel('child_items', label='Child items'),
]
class Child(Orderable):
parent_value = ParentalKey(Parent, on_delete=models.CASCADE, related_name='child_items')
value = models.CharField(max_length=255)
panels = [
FieldPanel('value'),
]