wagtail 中的嵌套类别/InlinePanel

2024-04-18

我很难实现“嵌套类别”之类的东西:

PageA:
  - Cat1
    - SubCat1
    - SubCat2
    - ...
  - Cat2
    - SubCat1
  - ...

所有类别和子类别都应可由编辑排序和编辑。

我的猜测是这样的:

class CategoryTestPage(Page):
    content_panels = Page.content_panels + [
        InlinePanel('categories')
    ]


class Category(Orderable,ClusterableModel,models.Model):
    page = ParentalKey(CategoryTestPage, related_name='category')
    category = models.CharField(max_length=250)

    def __str__(self):
        return "%d %s" % (self.id, self.category)

    panels = [
            FieldPanel('category'),
            InlinePanel('subcategory')
    ]

class SubCategory(Orderable,models.Model):
    category = ParentalKey(ProjektOrdnung, related_name='subcategory')
    subcategory = models.CharField(max_length=250)

    def __str__(self):
        return "%d %s" % (self.id, self.subcategory)

    panels = [
            FieldPanel('subcategory')
    ]

但这导致'CategoryForm' object has no attribute 'formsets'。看起来是嵌套的InlinePanel问题是什么?

此外,我需要这种“层次分类法”来将其中一些类别/子类别分配给其他页面:

PageB:
    - has Cat1
      - has SubCa2
    - ...

...看起来很像分层标签...

有什么想法如何实现这个或者我的实现有什么问题吗?

亲切的问候, 通布赖特

PS:我使用的是 wagtail 1.2rc1


这是一种方法,界面改进有很大空间;)为了在页面级别对类别进行排序,我建议使用django-sortedm2m https://github.com/gregmuellegger/django-sortedm2m.

from wagtail.wagtailcore.models import Orderable, Page
from wagtail.wagtailsnippets.models import register_snippet
from django.db import models


@register_snippet
class Category(models.Model):
    name = models.CharField(
        max_length=80, unique=True, verbose_name=_('Category Name'))
    slug = models.SlugField(unique=True, max_length=80)
    parent = models.ForeignKey(
        'self', blank=True, null=True, related_name="children",
        help_text=_(
            'Categories, unlike tags, can have a hierarchy. You might have a '
            'Jazz category, and under that have children categories for Bebop'
            ' and Big Band. Totally optional.')
    )
    description = models.CharField(max_length=500, blank=True)

    class Meta:
        ordering = ['name']
        verbose_name = _("Category")
        verbose_name_plural = _("Categories")

    panels = [
        FieldPanel('name'),
        FieldPanel('parent'),
        FieldPanel('description'),
    ]

    def __str__(self):
        return self.name

    def clean(self):
        if self.parent:
            parent = self.parent
            if self.parent == self:
                raise ValidationError('Parent category cannot be self.')
            if parent.parent and parent.parent == self:
                raise ValidationError('Cannot have circular Parents.')

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        return super(Category, self).save(*args, **kwargs)


class CategoryPage(models.Model):
    category = ParentalKey('Category', related_name="+", verbose_name=_('Category'))
    page = ParentalKey('MyPage', related_name='+')
    panels = [
        FieldPanel('category'),
    ]


class MyPage(Page):
    categories = models.ManyToManyField(Category, through=CategoryPage, blank=True)
    content_panels = Page.content_panels + [
        FieldPanel('categories'),
    ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wagtail 中的嵌套类别/InlinePanel 的相关文章

  • Rest API 中 Streamfield 的自定义表示

    我对这个话题有几个疑问 https groups google com forum topic wagtail developers Z4oaCIJXYuI 我正在构建一个无头 Wagtail 具有基于 React 的前端 它调用 Wagt
  • 在 wagtail 中使外部链接在新窗口中打开

    我最近实现了添加target blank 到这样的外部链接 hooks register after edit page def do after page edit request page if hasattr page body so
  • Django storages S3 - 存储现有文件

    我有 django 1 11 和最新的 django storages 使用 S3 后端进行设置 我正在尝试使用 AWS 图像链接作为起点 以编程方式实例化图像文件 我无法弄清楚如何通过查看源代码 文档来做到这一点 我假设我需要创建一个文件
  • 限制 Wagtail Steamfield 中特定 DocumentChooserBlock() 块的文件类型

    我试图限制 wagtail 流字段块内特定 DocumentChooserBlock 的查询结果 我已经知道您可以使用以下方法限制页面类型的文档选择器的文件类型hooks 但我想避免限制页面范围内可能的文件类型 以防我需要它们用于其他 St
  • 如何为 Wagtail TaggedItemBase 标签类设置多个 ParentalKey

    我有两个不同的页面模型 没有子类化 单独的应用程序 只有类似的字段是常见的字段 例如 模型名称 id 零件 比方说 汽车和摩托车 我正在制作一个单独的页面 其中包含其部件的表格 还需要包含诸如 id 之类的列 我认为它可以是 pk 网上商店
  • Wagtail 单元测试:添加子页面将它们转换为基本类型

    尝试为 Wagtail 创建一些单元测试并遇到以下问题 gt gt root FrontPage add root instance FrontPageFactory build gt gt root
  • Wagtail - 仅在主页上显示三个最新帖子

    我创建了一个模型来在主页上显示帖子 但只想显示三个最新帖子 我是否需要为此使用分页 或者是否有可以使用的挂钩 我想我可以使用分页 只是不包含 下一个 按钮 但这看起来有点像黑客 我想以正确的方式做到这一点 我对 Django 和 Pytho
  • 使用带有动态选择的 Wagtail“ChoiceBlock”,而不是硬编码列表

    我们有一个博客模型的设置 该模型与 BlogPageCategory 具有多对多关系 并且我们有一个 最近的博客文章 流字段块 可让您指定是否显示 X 最新博客文章的卡片 或来自特定类别的 X 最新博客文章 因此 我们从以下代码开始 fro
  • 使用 Wagtail 页面或 Django 模型的指南?

    例如 我想使用wagtail建立一个电子商务网站 其中一个组件是订单 我认为 order 不应该是 wagtail Page 而是简单的 Django 模型 见下面的代码 from django db import models from
  • 如何在 Wagtail 中创建不可见的虚拟页面?

    如何在 Wagtail 中创建不可见的虚拟页面 我需要 Wagtail 中的 虚拟 页面对象来为非基于 Wagtail 的页面以及外部资源构建菜单 见我的入帖here https stackoverflow com questions 56
  • Wagtail MultiSite - 交叉发布内容

    我目前正在通过单个 Wagtail 安装构建两个站点 这些网站适用于一家公司及其姊妹公司 内容有一些重叠 理想情况下 我们不想将相同的内容发布两次 特别是 我们在两个网站上都有一个活动页面 可能有与两家公司相关的活动 问题是 Wagtail
  • 在 wagtail 中批量上传和创建包含图像的页面(迁移)

    我正在使用 wagtail 创建一个网站来替换某人现有的 weebly 网站 重新创建数百个页面实例并上传每个页面的每个图像需要花费几个小时 我已经有了我需要的页面模型 并且我的网站看起来很像 wagtail 文档中的入门教程 我想知道如何
  • 链接到 Wagtail CMS 中的特定页面

    在 Wagtail CMS 中 我不知道如何构建指向特定页面的链接 我想要我的模板中有一个 固定的 未创作的 链接BlogIndexPage to my BlogIndexArchivePage反之亦然 在官方文档中pageurl http
  • Wagtail 文档:大文件(>2GB)上传失败

    我正在尝试使用 Wagtail 应用程序中内置的 wagtaildocs 应用程序上传文件 我已经使用 Nginx 的 Digital Ocean 教程方法设置了 Ubuntu 16 04 服务器 鳐鱼 Postgres 一些初步澄清 在我
  • 2.5升级后无法编辑Streamfield页面

    我在本地开发中有一个使用 Streamfield 和 2 个自定义 StructBlock 字段的站点 在 2 4 中工作正常 但升级到 2 5 后 我可以在管理中正常创建页面 但当我保存后在管理中编辑该页面时 会出现错误 我也尝试使用新的
  • wagtail 中的嵌套类别/InlinePanel

    我很难实现 嵌套类别 之类的东西 PageA Cat1 SubCat1 SubCat2 Cat2 SubCat1 所有类别和子类别都应可由编辑排序和编辑 我的猜测是这样的 class CategoryTestPage Page conten
  • Wagtail / Hallo.js - 添加插件但修改的内容未保存

    我正在 Wagtail 1 3 1 Django 1 7 11 上运行 我已经激活了 Hallohtml 和 Hallojustify 插件 它们出现在工具栏中 没有图标 但有按钮 可以使用按钮 并且可以在文本区域中看到修改 我的意思是 例
  • 从 shell 添加/修改 wagtail 流场中的块值

    我有一个页面 其中包含一个 StreamField 正文和一个名为 HeadingBlock 的自定义块 class HeadingBlock blocks StructBlock heading blocks CharBlock cssi
  • 如何在ModelAdmin中使用InlinePanel?

    我正在设置一个需要使用多个子模型实例创建的模型 我希望能够在管理界面中编辑和创建此模型 因此我使用以下命令添加它ModelAdmin http docs wagtail io en v1 9 reference contrib modela
  • StreamBlock StreamField 中的 content_panels

    我定义了一些自定义 StreamField 块 我希望该选项能够折叠自定义块中的某些属性 就像我可以使用 content panels 对标准页面模型所做的那样 但我不认为这是受支持的 正确的 如果不为管理页面编写一些自定义 css js

随机推荐