gpt4 book ai didi

django - 在 Wagtail 中创建可重用字段集的方法?

转载 作者:行者123 更新时间:2023-12-02 04:09:14 28 4
gpt4 key购买 nike

我正在评估 Wagtail,看看是否能在我的公司中找到它与 Wordpress 和 Drupal 一起的位置。到目前为止,我认为它很有趣,并且非常喜欢其中的很多内容,但是有一件事情我非常喜欢,但找不到方法来实现。

我的商店使用模式库(原子设计),最初我对 StreamField 感到兴奋,它能够直接绑定(bind)到模式库,包括创建嵌套模式(一个可重用的按钮类,可以放入CTA 和 Hero Widget。但是流字段不适用于必须位于某个位置的必需页面元素,这些元素可能位于内容流之外(英雄内容、号召性用语...)。

我发现了这个问题:https://github.com/wagtail/wagtail/issues/2048但似乎没有解决,而且已经很长时间没有事件了。

现在我找到了两种可能的解决方案:

  1. 一个流字段,可能只有一个 block ,以及其中一个 block 的最小值和最大值。

缺点是用户界面似乎不知道最小/最大,并且您必须在被告知之前保存页面。此外,该表单不会自动可见,您仍然需要单击 CTA 按钮。这对我的用户来说太令人困惑了(我无法向我的商店说明这一点,因为这在 WP 和 Drupal 中不是问题)。

  • Django 模型的外键,使用 InlinePanel 并需要单个实例。
  • 这里的缺点是用户仍然会看到灰显的添加按钮,并且仍然会看到字段数据的删除按钮(他们可以这样做),然后页面不会在保存时验证。

    我在源代码中看到了一个BlockField,但是完全没有关于如何使用它的文档,看起来这样的东西可以解决我的问题,但我无法让它工作。

    我错过了什么吗?有没有办法创建一组可重用的字段,我可以轻松地将其附加到页面类型,并使这些字段在页面加载时可见并以用户立即理解的方式呈现?

    最佳答案

    abstract base model 中定义您的公共(public)字段,并在您想要使用页面类时继承它们:

    from django.db import models
    from wagtail.admin.edit_handlers import FieldPanel
    from wagtail.core.fields import RichTextField
    from wagtail.core.models import Page


    class HeroFields(models.Model):
    hero_image = models.ForeignKey('wagtailimages.Image', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
    hero_url = models.URLField()

    hero_field_panels = [
    FieldPanel('hero_image'),
    FieldPanel('hero_url'),
    ]

    class Meta:
    abstract = True


    class HomePage(Page, HeroFields):
    body = RichTextField()

    content_panels = Page.content_panels + HeroFields.hero_field_panels + [
    FieldPanel('body'),
    ]

    关于django - 在 Wagtail 中创建可重用字段集的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57578250/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com