例如,我想使用 wagtail 构建一个电子商务网站,其中一个组件是订单。我认为 order 不应该是 wagtail Page,而是简单的 Django 模型,请参见下面的代码。
from django.db import models
from wagtail.admin.edit_handlers import (
FieldPanel,
StreamFieldPanel,
MultiFieldPanel,
InlinePanel,
)
from wagtail.core.fields import RichTextField
from wagtail.core.models import Page
# Since product details are shown to users, so need to have a Page for it.
class XyzProductPage(Page):
template = "product/product_page.html"
name = models.CharField(max_length=100)
desc = RichTextField(blank=False, null=True)
content_panels = Page.content_panels + [
FieldPanel("name"),
FieldPanel("desc"),
]
class XyzOrderedProduct(models.Model):
product = models.ForeignKey(
"XyzProductPage", on_delete=models.CASCADE, related_name="+"
)
order = models.ForeignKey(
"XyzOrder", on_delete=models.CASCADE, related_name="ordered_products"
)
# Orders are not shown to users, only for internal use, so use Django model
class XyzOrder(models.Model):
panels = [
# and per each order, I want to display all ordered products on wagtail admin UI,
# so I try to use this MultiFieldPanel, but doesn't seem to work, why?
MultiFieldPanel(
[InlinePanel("ordered_products", label="Ordered Product",)],
heading="Ordered Product(s)",
),
]
我还ModelAdmin
为上面的 Django 模型定义了,所以我可以在 wagtail 管理 UI 上看到它们。
我的问题是
何时使用 wagtail Page 模型,何时使用 Django 模型?在上面的例子中,订单被定义为 Django 模型,或者我应该使用 Page?
如何正确使用 Django 模型的面板?我看到了一些可以为 Django 模型使用面板的教程,但是在上面的代码中,我想
XyzOrder
在 wagtail 管理 UI 上列出每个订单(即)中的所有订购产品,但它不起作用。如何选择多个订单并批量删除?看起来 wagtail 管理员不支持 Django 模型的批量选择和删除,但 Django 管理员有。那么我们如何进行批量选择和删除呢?