2

例如,我想使用 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 上看到它们。

我的问题是

  1. 何时使用 wagtail Page 模型,何时使用 Django 模型?在上面的例子中,订单被定义为 Django 模型,或者我应该使用 Page?

  2. 如何正确使用 Django 模型的面板?我看到了一些可以为 Django 模型使用面板的教程,但是在上面的代码中,我想XyzOrder在 wagtail 管理 UI 上列出每个订单(即)中的所有订购产品,但它不起作用。

  3. 如何选择多个订单并批量删除?看起来 wagtail 管理员不支持 Django 模型的批量选择和删除,但 Django 管理员有。那么我们如何进行批量选择和删除呢?

4

0 回答 0