例如,我想使用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 admin 不支持 Django 模型的批量选择和删除,但 Django admin 支持。那么我们如何进行批量选择和删除呢?