`
dongin
  • 浏览: 120267 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

django自定义model

阅读更多
       前不久在一个项目中遇到了一个问题,客户要求把django的admin后台的某些field变成文本编辑框,也就是把文本编辑器集成到admin后台, 开始在网上查了一下,发现大部分人都是重写了admin后台,但是从我的项目来看,要是这样做的话工作量很大,而且都是些重复的工作。看了一下 django关于field那块的源码,发现django的所有field都是继承一个Filed基类,然后自己定义不同field的功能,同时包括在 admin后台的显示。所以就有了自己定义field的想法,给项目节省了不少时间。具体如下:
       在项目中下加了个python包,包名叫mymodels(自己起名),这个包下包含__init__.py 和forms.py两个文件,文件内容如下:

__init__.py:
python 代码
  1. from django.db import models  
  2.   
  3. import forms  
  4.   
  5. class RichTextField(models.TextField):  
  6.     def get_internal_type(self):  
  7.         return "TextField"  
  8.      
  9.     def get_manipulator_field_objs(self):  
  10.         return [forms.RichTextField]  

forms.py:
python 代码
  1. import django.forms as djangoforms  
  2.   
  3. class RichTextField(djangoforms.LargeTextField):  
  4.     def render(self,data):  
  5.         return djangoforms.LargeTextField.render(self,data) + """ 
  6.         <script></script> 
  7.         <script> 
  8.             window.onload=function(){ 
  9.                 var sBasePath="/media/FCKeditor/"; 
  10.                 var oFCKeditor=new FCKeditor("%s",500,400,"Pic","500"); 
  11.                 oFCKeditor.BasePath=sBasePath;oFCKeditor.ReplaceTextarea(); 
  12.                                 } 
  13.         </script>""" % self.field_name  

这里我用的FCKeditor文本编辑器。
       这样你只要在apps中的model中这样定义field:rich_text = mymodels.RichTextField() ,在admin后台这个field就会是继承有文本编辑器的文本编辑域,非常方便。
        同时要注意,我这里写发会带来一个问题,如果一个model中包含多个这样的域,FCKeditor就会被加载多次,所以那段初始化FCKeditor的js代码可以写在别的地方来解决这个问题。至于放哪,自己想想吧。
分享到:
评论
1 楼 jythoner 2009-06-26  
兄弟好像是在用python工作的?好羡慕啊,有时间交流交流,我的msn:core5277@hotmail.com

相关推荐

    深入理解Django自定义信号(signals)

    django中自定义了一些singals,用于监听一些操作,并发出通知 官方解释: Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。 简单来说,信号允许特定的sender通知一组receiver...

    Django如何自定义model创建数据库索引的顺序

    主要介绍了Django如何自定义model创建数据库索引的顺序,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    自定义django admin model表单提交的例子

    今天小编就为大家分享一篇自定义django admin model表单提交的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Django自定义用户表+自定义admin后台中的字段实例

    1.自定义用户表 注意事项 必须在settings中配置AUTH_USER_MODEL这个字段 # 覆盖默认的用户模型,使用自定义用户模型 # 语 法:'app的名称.自定义用户模型的名称' AUTH_USER_MODEL = 'admi.UserModel' 2.在models...

    django xadmin action兼容自定义model权限教程

    主要介绍了django xadmin action兼容自定义model权限教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Django自定义用户认证示例详解

    Django附带的认证对于大多数常见情况来说已经足够了,但是如何在 Django 中使用自定义的数据表进行用户认证,有一种较为笨蛋的办法就是自定义好数据表后,使用OnetoOne来跟 Django 的表进行关联,类似于这样: ...

    Django自定义列表 models字段显示方式

    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的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    重写django的model下的objects模型管理器方式

    django自定义管理器和model的继承 在我写代码时建立的很多数据库需要一些共同的字段,比如is_active, create_time这些字段,所以可以建立一个基类model 模型的继承 我们可以充分利用oop特性,建立一个基类model,...

    在django admin详情表单显示中添加自定义控件的实现

    首先先讲解下思路,admin中有几个界面,一个是展示的list界面,一个是详情的model界面,model中其实就是详情detail,里面记录了此条数据的全部内容,精简来说就是一个form表单的内容展示。 那么知道了这个就好解决了...

    Django-Model数据库操作(增删改查、连表结构)详解

    一、数据库操作 1、创建model表 基本结构 from django.db import models class userinfo(models.Model): #如果没有models.... 如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必

    Python中Django 后台自定义表单控件

    然而,对应 Model 生成的表单,并不友好,我们希望能像前端开发一样做出各种类型的控件,这就得对其后台的表单进行自定义。 其实 django 已经为我们提供了一些可用的表单控件,比如:多选框、单选按钮等,下面就以...

    django Model层常用验证器及自定义验证器详解

    Model.clean() 可自定义验证条件和报错信息; Model.validate_unique() 为验证添加的唯一性约束。 2、此三步验证通过调用full_claen(exclude=None, validate_unique=True)来依次执行。 exclude:可以用来指定不需要...

    django restframework serializer 增加自定义字段操作

    在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段。有两种方法实现这个目的。 假设现在有一个Animal模型,其中有name, type, ...

    Django框架自定义模型管理器与元选项用法分析

    本文实例讲述了Django框架自定义模型管理器与元选项用法。分享给大家供大家参考,具体如下: 自定义模型管理器 每个模型类默认都有一个 objects 类属性,可以把它叫 模型管理器。它由django自动生成,类型为 django...

Global site tag (gtag.js) - Google Analytics