2016-11-07 2 views
1

J'ai créé un plugin personnalisé pour mon projet dans Django/Django-CMS et le plugin a une liste de témoignages que l'utilisateur choisit lors de l'ajout du plugin à la page. Le modèle est le suivant:Le plugin personnalisé Django-CMS n'affiche pas les données dans les pages publiées

class TestimonialsPlugin(CMSPlugin): 
    n_testimonials = models.PositiveIntegerField(
     verbose_name=_('Number of Testimonials'), default=5) 

    speed_autoplay = models.PositiveIntegerField(
     verbose_name=_('Speed of slider (milliseconds)'), default=3000) 

    picked_testimonials = models.ManyToManyField(Testimonials, 
               verbose_name=_('picked_testimonials'), 
               blank=True, null=True) 

Dans le mode d'édition que je peux se les témoignages dans ma page et je peux publier sans erreurs, mais quand je vois la page publié les témoignages ne montre pas. Le modèle de plugin est en cours de rendu, mais selected_testimonials donne None. Voici le modèle:

<div class="max-width1440 block clearfix relative"> 
    <div class="small-only-text-left small-12 small-offset-0 medium-text-center medium-offset-1 medium-10 large-offset-1 large-10 column pt-px60 pb-px40 pl-px40 pr-px40 slider-testimonials"> 
     {% for testimonial in instance.picked_testimonials.all %} 
      {% if forloop.counter0 < instance.n_testimonials %} 
       <div class="slider column"> 
        <blockquote class="acta_mediumitalic size36 pl-px80 pr-px80 line-height140"> 
         {% render_model testimonial "description" %} 
        </blockquote> 

        <div class="mt-px30"> 
         <p class="acta_book size20 softblack">{{ testimonial.author }},<span>{{ testimonial.city }}</span> 
         </p> 
        </div> 
       </div> 

      {% endif %} 
     {% endfor %} 
    </div> 
</div> 

Répondre

3

Lorsqu'une page est publiée, une copie d'un plug-in est créé - qui inclut les champs de plug-ins, mais pas de relations. Il y a une disposition dans le CMS de fournir la méthode de copie exactement cet effet, voir l'exemple de documentation:

class ArticlePluginModel(CMSPlugin): 
    title = models.CharField(max_length=50) 
    sections = models.ManyToManyField(Section) 

    def copy_relations(self, oldinstance): 
     self.sections = oldinstance.sections.all() 

Le bit important est le copy_relations, ce qui assure que le nouvel objet a les mêmes liens relationnels.

Dans votre cas, quelque chose le long de ces lignes devrait fonctionner:

class TestimonialsPlugin(CMSPlugin): 
    n_testimonials = models.PositiveIntegerField(
     verbose_name=_('Number of Testimonials'), default=5) 

    speed_autoplay = models.PositiveIntegerField(
     verbose_name=_('Speed of slider (milliseconds)'), default=3000) 

    picked_testimonials = models.ManyToManyField(Testimonials, 
               verbose_name=_('picked_testimonials'), 
               blank=True, null=True) 

    def copy_relations(self, oldinstance): 
     self.picked_testimonials = oldinstance.picked_testimonials.all() 
+0

Merci: D qui a fonctionné et a résolu mon problème. – patricia

+1

Content de pouvoir aider et de travailler avec Django CMS! – petr