首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写了一个命令,可以从现有的Django-CMS插件创建一个Django-CMS插件

编写了一个命令,可以从现有的Django-CMS插件创建一个Django-CMS插件
EN

Stack Overflow用户
提问于 2019-09-06 22:30:58
回答 1查看 69关注 0票数 1

我有一个包含两个ManyToManyField (播客和custom_podcasts)的插件(PodcastPlugin)。我想创建一个Django命令,在同一页上创建一个新插件和旧实例的占位符。

[我可以创建一个新的插件,但它不会将旧的播客和custom_podcasts实例复制到新创建的PodcastPlugin中。

下面是我的代码:

代码语言:javascript
复制
from cms.models.pagemodel import Page
from cms.api import add_plugin


for page in Page.objects.all():
    for placeholder in page.placeholders.filter(page=263):
        for plugin in placeholder.get_plugins_list():
            if plugin.plugin_type == 'PodcastPlugin':
                for custom_ids in plugin.get_plugin_instance()[0].custom_podcasts.values_list('id'):
                        for podcasts_ids in plugin.get_plugin_instance()[0].podcasts.values_list('id'):
                            add_plugin(
                                placeholder=placeholder,
                                plugin_type='PodcastPlugin',
                                podcasts=[podcasts_ids[0]],
                                cmsplugin_ptr_id=plugin.id,
                                custom_podcasts=[custom_ids[0]],
                                title='New Podcast',
                                language='de'
                            )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-16 17:01:57

我通过循环访问两个外键(podcast和custom_podcasts)的实例,然后使用表示法保存它,从而解决了这个问题。

这是我的解决方案,以防有人遇到这个问题:

代码语言:javascript
复制
    for page in Page.objects.all():
        for placeholder in page.placeholders.all():
            for plugin in placeholder.get_plugins_list():
                if plugin.plugin_type == PodcastPlugin:
                    for podcasts_ids in plugin.get_plugin_instance()[0].podcasts.values_list('id'):
                        podcast_ids_list.append(podcasts_ids[0])
                    for custom_ids in plugin.get_plugin_instance()[0].custom_podcasts.values_list('id'):
                        custom_ids_list.append(custom_ids[0])

                    new_plugin = add_plugin(
                        placeholder=placeholder,
                        plugin_type=pluginname,
                        cmsplugin_ptr_id=plugin.id,
                        created_at=plugin.get_plugin_instance()[0].created_at,
                        podcasts_by_topic=plugin.get_plugin_instance()[0].podcasts_by_topic,
                        publication_date=plugin.get_plugin_instance()[0].publication_date,
                        publication_end_date=plugin.get_plugin_instance()[0].publication_end_date,
                        limit=plugin.get_plugin_instance()[0].limit,
                        collapse=plugin.get_plugin_instance()[0].collapse,
                        title=plugin.get_short_description() + ' (NEW)',
                        language='de'
                    )
                    for values in podcast_ids_list:
                        new_plugin.podcasts.add(values)
                    for values in custom_ids_list:
                        new_plugin.custom_podcasts.add(values)
                    new_plugin.save()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57823979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档