我有一个网站,其中有许多指向 YouTube 的 Filer Video 插件。我发现该文件管理器不太适合响应式网站(它需要固定宽度),因此我没有修复它,而是编写了自己的简单小插件,可以轻松地为可变宽度布局嵌入 YouTube。
所以现在我有很多cmsplugin_filer_video.models.FilerVideo
我想用我的实例替换cmsyoutube.models.YtVideo
实例。循环它们很好,但是我如何以编程方式取出一个插件并将其(就地)替换为另一个插件?
仔细想想,它们[最终]都是基于 CMSPlugin 的。我可以将父项目转移到我的新课程中吗?
这是我到目前为止所了解到的。迭代旧视频并尝试创建新视频YtVideo
(同样的事情)在删除旧的之前指向同一个 cmsplugin_ptrFilerVideo v
...
for v in FilerVideo.objects.all():
plugin = v.cmsplugin_ptr
v.cmsplugin_ptr_id = None
new = YtVideo()
new.cmsplugin_ptr = plugin
plugin.plugin_type = 'YoutubePlugin'
new.youtube_id = re.search(r'v=([^&]+)', v.movie_url).groups(0)[0]
new.thumbnail = v.image
new.save()
plugin.save()
v.delete()
但 TreeBeard 对此感到非常沮丧:
NodeAlreadySaved: Attempted to add a tree node that is already in the database
看起来那里有一些级联保存逻辑。知道如何热连它,以便我可以替换插件实例而不破坏底层CMSPlugin
tree?
有更多的运气cms.api.add_plugin
。有趣的是我无法坚持下去。我认为它需要飘逸的“最后一个孩子”风格的英语而不是数字输入。所以我只是在第二次之后钉它add_plugin
.
from cms import api
for v in FilerVideo.objects.all():
youtube_id = re.search(r'v=([^&]+)', v.movie_url).groups(0)[0]
position = v.position
v.delete()
new = api.add_plugin(v.placeholder, 'YoutubePlugin', v.language, position, v.parent, youtube_id=youtube_id, thumbnail=v.image)
new.position = position
new.save()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)