我想将模型中的TextField更改为TinyMCE RichTextEditor。我已经下载了tinymce 4.8.3开发包并对其进行了自定义。然后我将tinymce文件粘贴到staticfiles目录。据我了解,为了使所有功能正常工作,我必须为视图页面上的元素分配一个 HTML类。它如何在本地html文件上工作。我已经尝试了通过pip安装的几乎所有应用程序(django-tinymce,django-tinymce4-lite等。)。而且我仍然想为自己调整这个富文本编辑器。富文本编辑器必须出现在管理页面上。
这是我的模型。py:
class Post(models.Model):
title = models.CharField(max_length=150)
content = models.TextField()
created = models.DateTimeField(auto_now_add=True)
tags = TaggableManager(blank=True)
class Media:
js = ('js/init-tinymce.js', 'js/tinymce/tinymce.js',)
admin.py:
class PostModelAdmin(admin.ModelAdmin):
list_display = ["title", "created"]
list_display_links = ["title"]
list_filter = ["created", "tags"]
search_fields = ["title", "content",]
class Meta:
model = Post
admin.site.register(Post, PostModelAdmin)
请告诉我我是否有不同的理解。我使用Django 2.0.8和python 3.6。在Internet上,我发现了如何以这种形式设置类,但无法将其添加到我的项目中。
class MyTextForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyTextForm, self).__init__(*args, **kwargs)
self.fields['content'].widget.attrs['class'] = 'tinymce'
class Meta:
model = Post
fields = ('content') # your fields here
答案 0 :(得分:1)
您需要创建一个表单:
class MyModelAdminForm(forms.ModelForm):
class Meta:
fields = '__all__'
model = Post
widgets = {
'yourfieldname': forms.Textarea(attrs={'class': 'your-class'})
}
现在将其添加到模型管理员中:
class PostModelAdmin(admin.ModelAdmin):
form = MyModelAdminForm
答案 1 :(得分:0)
您所拥有的代码已经差不多了,只有几件事:
Media
类应该在表单或窗口小部件上,而不是模型上要覆盖管理员使用的表单的行为,您有2个主要选项:
form
类属性,但是您必须实现表单formfield_overrides
的默认窗口小部件,这样,您只需编写一次窗口小部件即可。这是小部件代码:
class AdminTinyMceWidget(AdminTextareaWidget):
class Media:
js = ('js/init-tinymce.js', 'js/tinymce/tinymce.js',)
def __init__(self, attrs=None):
if attrs is None:
attrs = {'class': 'your-class'}
super().__init__(attrs)
以及模型管理员设置formfield_overrides
:
class PostModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': AdminTinyMceWidget()},
}