Guidelines for using Wagtail Pages or Django models?

眉间皱痕 提交于 2020-07-10 08:45:10

问题


For example, I want to build an ecommerce website using wagtail, one component is order. I think order should not wagtail Page, but simple Django model, see code below.

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)",
        ),
    ]

I also defined ModelAdmin for the above Django models, so I can see them on wagtail admin UI.

The questions I have are

  1. When to use wagtail Page model, when to use Django model? In the above example, orders are defined as Django models, or I should use Page?

  2. How to properly use panels for Django models? I saw some tutorial that I could use panels for Django models, but in the above code, I want to list all ordered products in each order (i.e. XyzOrder) on wagtail admin UI, but it doesn't work.

  3. How to select multiple orders and bulk delete them? Looks like wagtail admin has no support for bulk select & delete for Django models, but Django admin has. So how could we do bulk select & delete?

来源:https://stackoverflow.com/questions/62581737/guidelines-for-using-wagtail-pages-or-django-models

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!