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