在django模型中将html类设置为TextField
我想将模型中的TextField更改为TinyMCE RichTextEditor。我已经下载了tinymce 4.8.3开发包并进行了定制。然后我将tinymce文件粘贴到staticfiles目录。据我所知,为了让一切正常工作,我必须为视图页面上的元素分配一个HTML类。它在本地HTML文件上的工作方式。我尝试了几乎所有通过pip安装的应用程序(django tinymce、django-tinymce4-lite等)。我仍然想为自己调整这个富文本编辑器。富文本编辑器必须出现在管理页面上 这是my models.py:在django模型中将html类设置为TextField,django,python-3.x,Django,Python 3.x,我想将模型中的TextField更改为TinyMCE RichTextEditor。我已经下载了tinymce 4.8.3开发包并进行了定制。然后我将tinymce文件粘贴到staticfiles目录。据我所知,为了让一切正常工作,我必须为视图页面上的元素分配一个HTML类。它在本地HTML文件上的工作方式。我尝试了几乎所有通过pip安装的应用程序(django tinymce、django-tinymce4-lite等)。我仍然想为自己调整这个富文本编辑器。富文本编辑器必须出现在管理页面上 这
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。在互联网上,我找到了如何设置这样一个类的形式,但我不能添加到我的项目
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
您需要创建一个表单:
class MyModelAdminForm(forms.ModelForm):
class Meta:
fields = '__all__'
model = Post
widgets = {
'yourfieldname': forms.Textarea(attrs={'class': 'your-class'})
}
现在将其添加到您的模型管理员:
class PostModelAdmin(admin.ModelAdmin):
form = MyModelAdminForm
您的代码就快到了,只有几件事:
- 嵌套的
类应该在表单或小部件上,而不是在模型上Media
- 如果您总是希望在多个位置使用相同的CSS类,那么可以将其封装在一个小部件中
- 像在另一个答案中一样设置
类属性,但是必须实现表单表单
- 覆盖某个模型字段的默认小部件,这样您只需编写一次小部件
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\u覆盖
:
class PostModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': AdminTinyMceWidget()},
}