Django CMS 从草稿到实时丢失数据

Django CMS losing data from draft to live

我正在使用文件管理器插件创建轮播插件以轻松访问图像。 旋转木马只是用 Bootstrap Carousel.

制作的

问题是我的旋转木马在草稿中显示正确,但当我通过 live 时,只剩下箭头。

当我尝试使用模板中的某些 "hello" 进行调试时,此文件:

      {% load thumbnail %}

    <div id="myCarousel" class="gallery carousel slide" data-ride="carousel" id="CMSBcarouselPlugin_{{ gallery.pk }}">
    <ol class="carousel-indicators">
    {% for image in images %}  
    {% if forloop.first %}
      <li data-target="#myCarousel" data-slide-to="0" class="active">  </li>
    {% else %}
      <li data-target="#myCarousel" data-slide-to="{forloop.counter}"></li>
    {% endif %}
    {% endfor %}
  </ol>

etc.

我只能算出"hello"在for循环外显示。

我不明白为什么它在草稿中工作时不能在现场工作。

她是我的简单 cms_plugin.py 文件 :

class BcarouselPlugin(CMSPluginBase):
  model = Bcarousel
  name = _("Bcarousel")
  render_template = "bcarousel_plugin/bcarousel_plugin.html"
  raw_id_fields = ('image',)

  fields = ['title', 'template' ]

  def render(self, context, instance, placeholder):
    context['images'] = instance.image_set.all()
    context['gallery'] = instance
    try:
        loader.get_template('bcarousel_plugin/' + instance.template)
        self.render_template = 'bcarousel_plugin/' + instance.template
    except:
        pass
    return context

  def get_form(self, request, obj=None, **kwargs):
    form=super(BcarouselPlugin, self).get_form(request, obj, **kwargs)
    form.base_fields['template'] = forms.ChoiceField(
        choices=self._get_available_templates(),
        required=False
    )
    return form

  def _get_available_templates(self):
    choices = (('default', _('Bcarousel-Default')),)
    try:
        choices += settings.BCAROUSEL_PLUGIN_TEMPLATES
    except:
        pass
    return choices

plugin_pool.register_plugin(BcarouselPlugin)

如果有人有想法,那将是无价之宝。

先谢谢你了

您需要在您的插件模型中实现一个 copy_relationships 方法。

发布时实际上是在复制模型行。您需要告诉相关模型如何复制其记录并将它们关联到正确的实例。 CMS 允许您定义需要实现的方法 copy_relations

def copy_relations(self, oldinstance):
    for image in oldinstance.image_set.all():
        image.pk = None
        image.plugin = self
        image.save()

Documentation