2011-02-28 13 views
9

Tengo dos modelos simples Pregunta y Opción (una pregunta tiene varias opciones). He utilizado el formset en línea para agregar opciones junto con la adición de preguntas (a través de la funcionalidad modelAdmin).django-ckeditor: excepción no detectada usando líneas

class Question(models.Model): 
    category = models.CharField(max_length=50) 
    question_text = RichTextField(max_length=2000, verbose_name="Question Text", blank=True) 

class Choice(models.Model): 
    question = models.ForeignKey(Question) 
    description = RichTextField(max_length=500, verbose_name="Choice Description") 
    is_correct = models.BooleanField(default=False) 

Ahora los campos de la elección y la pregunta se define en RichTextField django-ckeditor. El problema es cuando hago clic en "Agregar otra opción" obtengo un uncaught exception: [CKEDITOR.editor] The instance "id_choice_set-__prefix__-description" already exists, lo que interrumpe la funcionalidad de ckeditor.

¿Alguna idea/sugerencia sobre cómo solucionar este problema? Creo que algunos ajustes JS pueden ayudar, pero tengo un conocimiento muy limitado de JS/jQuery

Gracias

+0

Probé tanto con admin como con grappelli. Ni trabajo __prefix__ debería ser reemplazado con el número pero no es porque django no espera que un __prefix__ esté en una función javascript. Aquí hay algunos pensamientos. django/contrib/admin/media/js/inlines.js Vea cómo se reemplaza __prefix__, no lo reemplaza en el javascript. Escribí mi propia función algo así como el.html (el.html(). Replace (id_regex, replacement)); esto lo reemplaza correctamente en el código javascript. PERO para entonces se ejecutó incorrectamente. ckeditor/widgets.py contiene el código que escribe el javascript, no estoy seguro de dónde ir desde aquí :( – Bufke

Respuesta

3

Tuve un problema similar y encontré una solución here.

Es causado por Uso de la línea, intente instalar la versión bifurcada para intentarlo.

Aunque pasaron 6 meses, espero que esto ayude a aquellos que tienen un problema similar.

2

Line 66 of django-ckeditor's widgets.py es donde sus problemas parece originarse.

Básicamente parece, la sustitución hecha para final_attr['id'] es de donde está obteniendo el __prefix__. Mirando a través del código fuente del marco, line 151 of Django's forms/formsets.py es de donde proviene ese valor. Además, desde la fuente, parece que el valor será reemplazado por el prefijo predeterminado , es decir, 'forma' en todos los casos, excepto si está usando _get_empty_form() incorrectamente de alguna manera.

Sería útil que facilite/contestar lo siguiente:.

  1. Una vez que se procesa su página, pero antes de "Agregar otra opción", enviar los atributos de la etiqueta de su juego de formularios rendido (incluido el formulario de gestión).

  2. ¿Está utilizando _get_empty_form() directamente en cualquier punto de su código?

  3. Código de la vista donde crea el formset y dónde lo renderiza.

Cuestiones relacionadas