使用Wagtail Pages或Django模型的指南?

v1l68za4  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(126)

例如,我想使用wagtail建立一个电子商务网站,其中一个组件是订单。我认为顺序不应该是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)",
        ),
    ]

字符串
我还为上面的Django模型定义了ModelAdmin,所以我可以在wagtail管理界面上看到它们。
我的问题是
1.什么时候使用wagtail页面模型,什么时候使用Django模型?在上面的例子中,订单被定义为Django模型,或者我应该使用Page?
1.如何正确使用Django模型的面板?我看到一些教程,我可以使用Django模型的面板,但在上面的代码中,我想在每个订单中列出所有订购的产品(即XyzOrder)在wagtail管理界面上,但它不工作。
1.如何选择多个订单并批量删除?看起来wagtail admin不支持Django模型的批量选择和删除,但Django admin有。那么,我们如何进行批量选择和删除呢?

ozxc1zmp

ozxc1zmp1#

虽然这个问题已经很老了,但这是一个很好的问题,可以在2023年给予更新。
在过去的一年里,Wagtail一直在从contrib ModelAdmin(Wagtail的,而不是Django的)迁移到对Snippets系统更好的一流支持。
从本质上讲,Snippets是任何非页面模型,您希望轻松管理,访问,报告甚至只是在Wagtail管理中查看。它们现在支持在主应用程序之外的模型(如第三方软件包)上注册。
此外,还有很多功能,如发布,修订,批量更改(不是编辑,而是删除和其他),审核日志,权限系统和高级面板编辑。
这使得Pages和“任何型号”在功能方面几乎等同。
在选择模型应该是Page还是非PageSnippet时,现在唯一真实的考虑的是如何管理模型中的内容。如果它是一个页面一样的东西,继承,有一个独特的网址slug,有一个标题等,那么一个页面将是有意义的。
否则,可以使用针对标准Django模型注册的Snippets,而不会有太多缺点。
需要提醒的是,即使您希望用户通过URL访问其他模型,您也可以使用RouteablePageMixin来提供来自其他模型的数据。
最后,您是否应该为电子商务网站使用CMS是需要仔细考虑的事情。有重叠,但每个都是自己的复杂空间,在选择工具之前,您应该始终了解您的用例。值得庆幸的是,Wagtail致力于“只是Django”,因此与Django电子商务框架的集成应该总是可能的,但可能并不简单。
一些有用的链接:

相关问题