在 DjangoCMS 4 中扩展/使用 LinkPluginMixin 的正确方法是什么

问题描述 投票:0回答:1

我想制作一个自定义插件,重新使用

djangocms_frontend
中包含的插件的链接功能,例如
LinkPlugin
。我找不到类似的示例,所以我试图使其像引导插件之一(来自
djangocms_frontend
)。所以,看起来,我应该使用
LinkPluginMixin
和一些额外的字段。

例如,假设我需要一个具有

header1
header2
字段以及“启用链接”插件字段的插件。

这是我迄今为止尝试过的:

// on bla/models.py
class Bla(GetLinkMixin, FrontendUIItem):
    header1 = models.CharField(max_length=50, default='')
    header2 = models.CharField(max_length=50, default='')

// on bla/cms_plugins.py
@plugin_pool.register_plugin
class BlaPlugin(LinkPluginMixin, CMSPluginBase):
    model = Bla
    module = _('MyModule')
    name = _('Bla')
    render_template = "bla/bla.html"
    allow_children = False
    fieldsets = [
        (None, {
            'fields': ('header1', 'header2')
        }),
        (
            _("Link settings"),
            {
                "classes": ("collapse",),
                "fields": (
                    ("external_link", "internal_link"),
                    ("mailto", "phone"),
                    ("anchor", "target"),
                ),
            },
        ),
    ] 

迁移运行良好,服务器运行没有错误。但是当我尝试在页面上添加插件的新实例时,我收到错误:

FieldError at /en/admin/cms/placeholder/add-plugin/

Unknown field(s) (phone, external_link, internal_link, anchor, mailto, target) specified for Bla. Check fields/fieldsets/exclude attributes of class BlaPlugin.

那么我做错了什么?

django-cms
1个回答
0
投票

django CMS 前端将其数据存储在 JSON 字段中。当 CSS 框架发生变化时,这很方便,因为更改不需要新的迁移。创建自己的 django CMS 前端插件时,您还必须定义一个表单。链接的字段是从 mixin 中收集的:

    # forms.py
    from django import forms
    from djangocms_frontend.contrib.link.forms import AbstractLinkForm
    from entangled.forms import EntangledModelForm

    from .models import Bla

    class BlaPluginForm(AbstractLinkForm, EntangledModelForm):
        class Meta:
            model = Bla
            entangled_fields = {
                "config": [
                    # No own fields to be stored in the config JSON
                 ]
            }
            untangled_fields = ("header1", "header1",)

表单的属性

link_is_optional
确定如果未显示链接,表单验证是否会失败。

您还可以通过添加表单字段并将其列在

"config"
元的
entangled_fields
条目中,将要存储在配置 JSON 中的字段添加到表单中。

我还没有测试过,如果有效请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.