Использование ckEditor в отдельных текстовых областях в формах администратора django - PullRequest
3 голосов
/ 27 мая 2010

Я хочу применить ckeditor к определенной текстовой области в форме администратора django, а не ко всем текстовым областям.

Как и в приведенном ниже фрагменте кода, ckeditor будет применяться к каждой текстовой области, присутствующей в форме django:

class ProjectAdmin(admin.ModelAdmin):

    formfield_overrides = 
    {models.TextField: {'widget': forms.Textarea(attrs={'class':'ckeditor'})}, }

    class Media:
        js = ('ckeditor/ckeditor.js',)

но я хочу, чтобы это было в определенной текстовой области, а не в каждой текстовой области.

1 Ответ

4 голосов
/ 27 мая 2010

У вас есть несколько вариантов.

Я думаю, что самое простое, если вы используете Django 1.2, тогда вам нужно создать пользовательскую форму для администратора и использовать опцию 'widgets':

ProjectForm(forms.ModelForm)
    class Meta:
        model = Project
        widgets = { 
           'field_1' : forms.Textarea(attrs={'class':'ckeditor'}),
           'field_2' : forms.Textarea(attrs={'class':'ckeditor'}),
            ...
        }

Если вы используете старую версию Django, вы все равно можете использовать пользовательскую форму, просто переопределите поле, в котором вы хотите ckEditor, в форме:

ProjectForm(forms.ModelForm)
    class Meta:
        model = Project

    field_1 = forms.SomeField(label=u'my label', widget=forms.Textarea(attrs={'class':'ckeditor'}))

Альтернатива:

ProjectForm(forms.ModelForm)
    class Meta:
        model = Project

    def __init__(self, *args, **kwargs):
        super(ProjectForm, self).__init__(*args, **kwargs)
        self.fields['field_1'].widget = forms.Textarea(attrs={'class':'ckeditor'})

Наконец, для всех трех опций вы устанавливаете ProjectAdmin для использования ProjectForm:

class ProjectAdmin(admin.ModelAdmin)
    form = ProjectForm
...