user2842009
user2842009

Reputation:

Django CMS custom plugin Error

Am tryong to create a custom plugin using ckeditor,but while adding this plugin to cms page its shows following errors:

"value errorCannot assign "u''": "Description.description" must be a "Description" instance:"

Following is my models.py and cms_plugin.py file.what is the issue here and thanks in adavance?

models.py:

from cms.models import CMSPlugin
from django.db import models
from ckeditor.fields import RichTextField
from django.utils.translation import ugettext_lazy as _
class Description(CMSPlugin):
    description=RichTextField(_('Description'),)

cms_plugins.py:

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

from apps.cmsplugins.models import *

class DescriptionPlugin(CMSPluginBase):
    model=Description
    name=('Description')
    render_template='cms/plugins/description.html'

    def render(self,context,instance,placeholder):
        print "contexttttttttttttttttttttttttttt"
        context.update({
                       'instance': instance.description,
                       'object':instance,
                       'placeholder': placeholder,
                       })
        return context

plugin_pool.register_plugin(DescriptionPlugin)

Upvotes: 1

Views: 1055

Answers (3)

Tarek Kalaji
Tarek Kalaji

Reputation: 2257

I had the same problem, now I solved it successfully just focus on simple steps to implement RichTextBox in Django-cms using (favorite editor) ckeditor:

models.py

from djangocms_text_ckeditor.models import AbstractText
class TipSlide(AbstractText):
    pass

cms_plugins.py

from djangocms_text_ckeditor.cms_plugins import TextPlugin
from models import SlideModel, TipSlide
class TipSlidePlugin(TextPlugin):
    name = u'Tip Slide Ads'
    model = TipSlide
    render_template = "slide/tipslide.html"

plugin_pool.register_plugin(TipSlidePlugin)

tipslide.html

<div>
    <div class="container">
        {{ body|safe }}<!-- The simple plugin -->
    </div>
</div>

the result is: enter image description here

Upvotes: 2

mishbah
mishbah

Reputation: 5607

You cannot name your model fields the same as any installed plugins lower- cased model name, due to the implicit one-to-one relation Django uses for subclassed models.

See warning end of "3.5.Storing configuration" section:

http://docs.django-cms.org/en/3.0.1/extending_cms/custom_plugins.html#storing-configuration

Upvotes: 0

Azd325
Azd325

Reputation: 6140

I think you have to do this because you dont pass the Description instance inside in the context instance.descriptontoinstance

def render(self,context,instance,placeholder):
    print "contexttttttttttttttttttttttttttt"
    context.update({
                   'instance': instance,
                   'object':instance,
                   'placeholder': placeholder,
                   })
    return context

Upvotes: 0

Related Questions