前不久在一个项目中遇到了一个问题,客户要求把django的admin后台的某些field变成文本编辑框,也就是把文本编辑器集成到admin后台, 开始在网上查了一下,发现大部分人都是重写了admin后台,但是从我的项目来看,要是这样做的话工作量很大,而且都是些重复的工作。看了一下 django关于field那块的源码,发现django的所有field都是继承一个Filed基类,然后自己定义不同field的功能,同时包括在 admin后台的显示。所以就有了自己定义field的想法,给项目节省了不少时间。具体如下:
在项目中下加了个python包,包名叫mymodels(自己起名),这个包下包含__init__.py 和forms.py两个文件,文件内容如下:
__init__.py:
python 代码
- from django.db import models
-
- import forms
-
- class RichTextField(models.TextField):
- def get_internal_type(self):
- return "TextField"
-
- def get_manipulator_field_objs(self):
- return [forms.RichTextField]
forms.py:
python 代码
- import django.forms as djangoforms
-
- class RichTextField(djangoforms.LargeTextField):
- def render(self,data):
- return djangoforms.LargeTextField.render(self,data) + """
- <script></script>
- <script>
- window.onload=function(){
- var sBasePath="/media/FCKeditor/";
- var oFCKeditor=new FCKeditor("%s",500,400,"Pic","500");
- oFCKeditor.BasePath=sBasePath;oFCKeditor.ReplaceTextarea();
- }
- </script>""" % self.field_name
这里我用的FCKeditor文本编辑器。
这样你只要在apps中的model中这样定义field:rich_text = mymodels.RichTextField() ,在admin后台这个field就会是继承有文本编辑器的文本编辑域,非常方便。
同时要注意,我这里写发会带来一个问题,如果一个model中包含多个这样的域,FCKeditor就会被加载多次,所以那段初始化FCKeditor的js代码可以写在别的地方来解决这个问题。至于放哪,自己想想吧。
分享到:
相关推荐
django中自定义了一些singals,用于监听一些操作,并发出通知 官方解释: Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。 简单来说,信号允许特定的sender通知一组receiver...
主要介绍了Django如何自定义model创建数据库索引的顺序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
今天小编就为大家分享一篇自定义django admin model表单提交的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1.自定义用户表 注意事项 必须在settings中配置AUTH_USER_MODEL这个字段 # 覆盖默认的用户模型,使用自定义用户模型 # 语 法:'app的名称.自定义用户模型的名称' AUTH_USER_MODEL = 'admi.UserModel' 2.在models...
主要介绍了django xadmin action兼容自定义model权限教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Django附带的认证对于大多数常见情况来说已经足够了,但是如何在 Django 中使用自定义的数据表进行用户认证,有一种较为笨蛋的办法就是自定义好数据表后,使用OnetoOne来跟 Django 的表进行关联,类似于这样: ...
class article(models.Model): id = models.AutoField(primary_key=True,verbose_name ='编号') title = models.CharField(max_length=100,verbose_name ='标题') content = models.CharField(max_length=20000,...
主要介绍了django之自定义软删除Model的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
django自定义管理器和model的继承 在我写代码时建立的很多数据库需要一些共同的字段,比如is_active, create_time这些字段,所以可以建立一个基类model 模型的继承 我们可以充分利用oop特性,建立一个基类model,...
首先先讲解下思路,admin中有几个界面,一个是展示的list界面,一个是详情的model界面,model中其实就是详情detail,里面记录了此条数据的全部内容,精简来说就是一个form表单的内容展示。 那么知道了这个就好解决了...
一、数据库操作 1、创建model表 基本结构 from django.db import models class userinfo(models.Model): #如果没有models.... 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必
然而,对应 Model 生成的表单,并不友好,我们希望能像前端开发一样做出各种类型的控件,这就得对其后台的表单进行自定义。 其实 django 已经为我们提供了一些可用的表单控件,比如:多选框、单选按钮等,下面就以...
Model.clean() 可自定义验证条件和报错信息; Model.validate_unique() 为验证添加的唯一性约束。 2、此三步验证通过调用full_claen(exclude=None, validate_unique=True)来依次执行。 exclude:可以用来指定不需要...
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段。有两种方法实现这个目的。 假设现在有一个Animal模型,其中有name, type, ...
本文实例讲述了Django框架自定义模型管理器与元选项用法。分享给大家供大家参考,具体如下: 自定义模型管理器 每个模型类默认都有一个 objects 类属性,可以把它叫 模型管理器。它由django自动生成,类型为 django...