我正在尝试从代码中向PlaceholderField添加插件。 我有一个带有几个字段的模型(问题),其中一个是PlaceholderField。
我想要做的是将TextPugin(或任何其他通用的cms_plugin)添加到该占位符字段。这是必需的,因为我不希望人们从cms的前端编辑模式手动添加TextPlugin,而是自己创建它,以便他们可以在之后添加正确的内容。
我知道有来自cms.api的add_plugin,但我仍然需要找到一种方法将PlaceholderField转换为占位符以使其正常工作。
这是我现在的代码。
models.py
from django.utils.translation import ugettext as _
from django.db import models
from djangocms_text_ckeditor.cms_plugins import TextPlugin
from cms.models.fields import PlaceholderField
from cms.api import add_plugin
class Question(models.Model):
topic = models.ForeignKey('Topic')
question = models.CharField(_("Question"),max_length=256)
answer = PlaceholderField ('Answer plugin')
priorityOrder = models.IntegerField(_("Priority Order"))
def save(self, *args, **kwargs):
# Here's the critical point: I can cast self.answer to PlaceholderField,
# but I can't cast it to a Placeholder or add a placeholder to it
add_plugin( ????, plugin_type='TextPlugin', language='us',)
super(Question, self).save(*args, **kwargs)
# set the correct name of a django.model object in the admin site
def __unicode__(self):
return self.question
class Topic(models.Model):
title = models.CharField(_("Topic title"),max_length=256)
priorityOrder = models.IntegerField(_("Priority Order"))
# set the correct name of a django.model object in the admin site
def __unicode__(self):
return self.title
非常欢迎任何帮助(包括其他方式)!
答案 0 :(得分:0)
PlaceholderField
只是一个ForeignKey
,可以在创建新实例时自动创建与新Placeholder
对象的关系。
因此,您无法在未保存的实例上的add_plugin
上使用PlaceholderField
。您需要先致电super().save()
,然后致电add_plugin(self.answer, ...)
。