如何自定义django cms插件

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

我正在使用 Django CMS 前端。我想自定义插件。例如,我想向默认的 Card 插件添加额外的字段。我尝试使用插件表单

到目前为止我已经做到了。

cms_plugins.py

class CustomPlugin(CMSPluginBase):
    form = CardForm
    name = "Custom Card"
    render_template = "siteindex/card_render.html"
    change_form_template = "siteindex/card.html"
    cache = False

    def render(self, context, instance, placeholder):
        context = super().render(context, instance, placeholder)
        return context


plugin_pool.register_plugin(CustomPlugin)

cms_forms.py

from djangocms_frontend.contrib.card.forms import CardForm
from django.db import models
class CustomForm(CardForm):
    title = forms.CharField(max_length=255, required=False, label="title")

    class Meta:
        model = CustomCard
        fields = "__all__"

card.html


{% extends "admin/cms/page/plugin/change_form.html" %}

card_render.html

{{ instance.title }}}

之后,当我尝试添加插件时,出现此错误(https://i.sstatic.net/2f7fjFSM.png

django plugins django-cms
1个回答
0
投票

您将 djangocms-frontend 卡表单附加到您的自定义插件,该插件没有 djangocms-frontend 卡插件的字段。因此出现错误。

djangocms-frontend 插件可以通过使用 Mixins 进行扩展,如 其文档中所述。这将允许您扩展现有的卡片插件

如果您想创建您自己的卡片插件,请尝试子类化

  • djangocms_frontend.contrib.cms_plugins.CardPlugin
    用于更新字段集和渲染模板
  • djangocms_frontend.contrib.forms.CardForm

请注意,表单使用 django-entangled 包,这意味着您必须执行以下操作:

from djangocms_frontend.contrib.card.forms import CardForm

class CustomForm(CardForm):
    title = forms.CharField(max_length=255, required=False, label="title")

    class Meta:
        entangled_fields = {
            "config": [
                "title",
            ]
        }

无需对模型进行任何更改。纠缠形式将附加标题字段存储在“config”中的 JSON 字段中。

希望这有帮助。让我知道你是如何成功的。

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