2010-05-27 23 views
3

我想在django管理形式的特定textarea上應用ckeditor而不是在所有文本區域。在django管理形式的選擇性文本區域使用ckEditor

像下面代碼段將適用CKEditor的每個文本區域目前的Django形式:

class ProjectAdmin(admin.ModelAdmin): 

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

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

,但我希望它在特定的textarea不是每一個文本區域。

回答

4

你有幾個選項。

我認爲最簡單的是,如果你使用Django 1.2,那麼你必須創建自定義窗體爲您的管理和使用「小工具」選項:

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 
+0

徹底的答案!你搖滾! – 2010-10-03 16:51:26

+0

嗨Lucasz,我使用Django 1.2.7和django-ckeditor ckeditor 3.6.3。 – Afrowave 2012-04-27 14:14:54

+0

這些都不能用於正常的非模型表單類! :( – 2014-10-15 07:29:17

相關問題