django自定义model

本文介绍如何在Django项目中自定义Admin后台的文本字段为富文本编辑器,通过创建新的RichTextField类实现这一功能,使得在Admin界面中能够直接使用文本编辑器进行编辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       前不久在一个项目中遇到了一个问题,客户要求把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.οnlοad=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代码可以写在别的地方来解决这个问题。至于放哪,自己想想吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值