Django CMS 将数据从草稿中丢失

Posted

技术标签:

【中文标题】Django CMS 将数据从草稿中丢失【英文标题】:Django CMS losing data from draft to live 【发布时间】:2015-05-15 01:14:45 【问题描述】:

我正在使用文件管理器插件创建一个轮播插件以轻松访问图像。 轮播只是使用 Bootstrap Carousel 制作的。

问题是我的轮播在草稿中正确显示,但是当我通过直播时,只剩下箭头。

当我尝试在模板中使用一些“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.

我只能在 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)

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

提前谢谢你

【问题讨论】:

如果您可以发布您的两个模型,我可以更新示例代码并确保其准确无误。 【参考方案1】:

您需要在插件模型中实现一个 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

【讨论】:

是的,我检查过这种方式,但它不起作用:(我在 bcarousel 模型类中添加了它但是... 哦,你是对的,我只是做错了。非常感谢你!

以上是关于Django CMS 将数据从草稿中丢失的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中创建丢失的数据库表?

Google脚本:从文档生成电子邮件会丢失格式

Django 表单中的 CSRF 令牌丢失或不正确

Django 会话意外丢失数据

vue: 解决vuex页面刷新数据丢失问题

ActiveMQ CMS:在创建消费者和设置监听器之间会丢失消息吗?