我正在使用 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)
您将 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 字段中。
希望这有帮助。让我知道你是如何成功的。