У меня есть сайт со многими плагинами Filer Video, которые указывают на YouTube. Я решил, что фильтр не очень хорош для чувствительных сайтов (он требует фиксированной ширины), поэтому вместо того, чтобы исправить это, я написал свой собственный простой плагин, который очень легко встраивается в YouTube для макетов с переменной шириной.Программно заменить один плагин CMS django другим
Итак, теперь у меня есть тонна cmsplugin_filer_video.models.FilerVideo
экземпляров, которые я хочу заменить моими cmsyoutube.models.YtVideo
экземплярами. Зацикливание их в порядке, но как я программно вынимаю один плагин и заменяю его (на месте) другим?
Размышляя вслух, они оба [в конечном итоге] основаны на CMSPlugin. Можно ли перенести родительские элементы в новый класс?
Это насколько я дошел до сих пор. Итерации над старыми видео и попытаться создать новую YtVideo
(то же самое), что указывает на то же cmsplugin_ptr перед удалением старого FilerVideo 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()
Но Древоборода очень расстраивается с этим:
NodeAlreadySaved: Attempted to add a tree node that is already in the database
Похоже, там есть каскадная логика сохранения. Любая идея, как hotwire это, чтобы я мог заменить экземпляры плагина, не разрушая базовое дерево CMSPlugin
?