`
dongin
  • 浏览: 121165 次
  • 性别: 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 自定义管理系统

    **Django自定义管理系统详解** Django是一款强大的Python Web开发框架,它遵循“Don't Repeat Yourself”(DRY)原则,旨在简化Web应用程序的构建过程。这个“django 自定义管理系统”项目显然基于Django框架,旨在...

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

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

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

    在Django框架中,自定义用户表和admin后台的字段是一项常见的需求,特别是在需要扩展默认用户模型以存储更多用户信息时。以下是如何实现这一功能的详细步骤和知识点: 1. **自定义用户表** - 在Django中,通常我们...

    对django xadmin自定义菜单的实例详解

    ### Django Xadmin自定义菜单详解 在Django项目开发中,为了提高管理界面的友好性和易用性,经常需要对管理界面进行定制化处理。其中,Xadmin是基于Django admin的一个扩展,提供了丰富的功能来增强用户体验。本文...

    PyPI 官网下载 | django-model-logs-0.1.15.tar.gz

    《PyPI与Django Model Logs库详解》 PyPI(Python Package Index)是Python开发者们发布和分享自己软件包的官方平台,它为全球的Python社区提供了丰富的第三方库。在PyPI官网上,我们可以找到各种各样的Python工具...

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

    ### Django 如何自定义 Model 创建数据库索引的顺序 在使用 Django 进行 Web 开发的过程中,数据库性能优化是一项非常重要的工作。而索引作为提升数据库读取速度的关键手段之一,其合理设置对于提高应用程序的整体...

    PyPI 官网下载 | django_model_event_actions-1.0.1-py3-none-any.whl

    6. **集成与应用**:`django_model_event_actions`可能提供了一种机制,允许开发者在Django模型事件触发时执行自定义操作,例如在数据创建、更新或删除时自动执行某些任务,提高了开发效率和代码的模块化。...

    django框架自定义用户表操作示例

    以下将详细介绍Django框架中自定义用户表的步骤和使用技巧。 首先,理解Django中默认的用户模型(User)是非常重要的。Django使用内置的auth模块提供了用户认证系统,其中User模型包含了用户的基本信息,如用户名...

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

    再次,要使Django使用我们的自定义用户模型,需要在Django项目的设置文件中(settings.py)将AUTH_USER_MODEL设置为指向我们定义的用户模型路径。这样,Django在运行时就会使用我们定义的用户模型替代默认的User模型...

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

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

    django之自定义软删除Model的方法

    总结一下,Django自定义软删除Model的关键在于创建一个包含`is_deleted`字段的抽象基类,自定义查询集类和Manager来控制查询行为,以及扩展删除方法以支持软删除逻辑。通过这种方式,我们既能够保证数据库中数据的...

    django自定义非主键自增字段类型详解(auto increment field)

    `django自定义非主键自增字段类型详解(auto increment field)`这一主题旨在介绍如何在Django中实现这样一个功能。自增字段通常用于记录序列号或者标识符,但默认情况下,Django只支持将主键(`AutoField`)设为自增...

    在django admin中添加自定义视图的例子

    然而,有时我们需要在Django Admin中添加自定义视图,以实现更复杂的功能或提供定制化的界面。本文将详细介绍如何在Django Admin中添加自定义视图。 首先,你需要在`admin.py`文件中创建一个新的类,该类继承自`...

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

    ### Django Xadmin Action 兼容自定义Model权限教程 #### 背景介绍 Django Xadmin 是基于 Django 的一个非常强大的管理插件框架,它提供了丰富的功能来增强 Django admin 的用户体验与管理效率。在实际项目开发过程...

    解决django框架model中外键不落实到数据库问题

    在Django框架中,Model是ORM(对象关系映射)的核心部分,用于定义数据库表的结构。外键(ForeignKey)是关系数据库中的一种概念,它允许一个表引用另一个表的主键,从而建立两个表之间的关联。然而,在某些情况下,...

    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,...

Global site tag (gtag.js) - Google Analytics