Плагин Django CMS с использованием встроенного тега включения в Orphaned Plugin
Я не знаю, что я делаю неправильно, потому что я следовал документации. Я думаю, что это какая-то мелочь. Вот сценарий:
Плагин представляет собой плагин Text Slideshow. Это позволяет администратору добавлять текст, который будет циклически повторять слайд-шоу.
Модели следующие:
class TextSlideshow(CMSPlugin):
label = models.CharField(max_length=128)
interval = models.IntegerField(
default=5000,
help_text=_('milliseconds between slides. (1000 equals 1 second)'))
def copy_relations(self, oldinstance):
for slide in oldinstance.text_slides.all():
slide.pk = None
slide.id = None
slide.text_slide_show = self
slide.save()
def __unicode__(self):
return self.label
class TextSlide(CMSPlugin):
text_slide_show = models.ForeignKey(TextSlideshow, related_name="text_slides")
display_value = models.CharField(max_length=128)
index = models.IntegerField(verbose_name=_("Display order"))
Встроенный это:
class TextSlideInline(admin.StackedInline):
model = TextSlide
fk_name = 'text_slide_show'
Плагин это:
class TextSlideshowPlugin(CMSPluginBase):
model = TextSlideshow
name = _("Text Slideshow")
render_template = "text_slideshow.html"
inlines = [TextSlideInline,]
module = _("Slideshow")
def __init__(self, model=None, admin_site=None):
super(TextSlideshowPlugin, self).__init__(model=model,
admin_site=admin_site)
for inline in self.inlines:
inline.placeholder = self.placeholder
inline.page = self.page
def render(self, context, instance, placeholder):
slides = instance.text_slides.all().order_by('index')
context.update({
'model': instance,
'placeholder': placeholder,
'slides': slides
})
return context
plugin_pool.register_plugin(TextSlideshowPlugin)
Плагин работает и будет работать без нареканий, но когда пользователь с правами администратора добавляет текстовые слайды примерно так:
Когда я бегу
./manage.py cms list plugins
Я получаю этот результат: ==== Plugin report ====
There are 2 plugin types in your database
ERROR : not installed
instance(s): 2
TextSlideshowPlugin
model : cmsslideshow.models.TextSlideshow
instance(s): 1
Пока я не бегу
./manage.py cms delete_orphaned_plugins
мое слайд-шоу останется в такте и будет работать нормально.Слайд-шоу текста хорошо, это просто встроенные элементы, которые являются сиротами.
Пожалуйста помоги.
1 ответ
После просмотра моего кода под микроскопом несколько раз при повторном чтении документации и множества примеров я нашел свою проблему.
Проблема в том, что дочерняя модель должна наследоваться от models.Model, а не CMSPlugin
менять:
class TextSlide(CMSPlugin):
чтобы:
class TextSlide(models.Model):