前不久在一个项目中遇到了一个问题,客户要求把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自定义管理系统详解** Django是一款强大的Python Web开发框架,它遵循“Don't Repeat Yourself”(DRY)原则,旨在简化Web应用程序的构建过程。这个“django 自定义管理系统”项目显然基于Django框架,旨在...
django中自定义了一些singals,用于监听一些操作,并发出通知 官方解释: Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。 简单来说,信号允许特定的sender通知一组receiver...
在Django框架中,自定义用户表和admin后台的字段是一项常见的需求,特别是在需要扩展默认用户模型以存储更多用户信息时。以下是如何实现这一功能的详细步骤和知识点: 1. **自定义用户表** - 在Django中,通常我们...
### Django Xadmin自定义菜单详解 在Django项目开发中,为了提高管理界面的友好性和易用性,经常需要对管理界面进行定制化处理。其中,Xadmin是基于Django admin的一个扩展,提供了丰富的功能来增强用户体验。本文...
《PyPI与Django Model Logs库详解》 PyPI(Python Package Index)是Python开发者们发布和分享自己软件包的官方平台,它为全球的Python社区提供了丰富的第三方库。在PyPI官网上,我们可以找到各种各样的Python工具...
### Django 如何自定义 Model 创建数据库索引的顺序 在使用 Django 进行 Web 开发的过程中,数据库性能优化是一项非常重要的工作。而索引作为提升数据库读取速度的关键手段之一,其合理设置对于提高应用程序的整体...
6. **集成与应用**:`django_model_event_actions`可能提供了一种机制,允许开发者在Django模型事件触发时执行自定义操作,例如在数据创建、更新或删除时自动执行某些任务,提高了开发效率和代码的模块化。...
以下将详细介绍Django框架中自定义用户表的步骤和使用技巧。 首先,理解Django中默认的用户模型(User)是非常重要的。Django使用内置的auth模块提供了用户认证系统,其中User模型包含了用户的基本信息,如用户名...
再次,要使Django使用我们的自定义用户模型,需要在Django项目的设置文件中(settings.py)将AUTH_USER_MODEL设置为指向我们定义的用户模型路径。这样,Django在运行时就会使用我们定义的用户模型替代默认的User模型...
django自定义管理器和model的继承 在我写代码时建立的很多数据库需要一些共同的字段,比如is_active, create_time这些字段,所以可以建立一个基类model 模型的继承 我们可以充分利用oop特性,建立一个基类model,...
总结一下,Django自定义软删除Model的关键在于创建一个包含`is_deleted`字段的抽象基类,自定义查询集类和Manager来控制查询行为,以及扩展删除方法以支持软删除逻辑。通过这种方式,我们既能够保证数据库中数据的...
`django自定义非主键自增字段类型详解(auto increment field)`这一主题旨在介绍如何在Django中实现这样一个功能。自增字段通常用于记录序列号或者标识符,但默认情况下,Django只支持将主键(`AutoField`)设为自增...
然而,有时我们需要在Django Admin中添加自定义视图,以实现更复杂的功能或提供定制化的界面。本文将详细介绍如何在Django Admin中添加自定义视图。 首先,你需要在`admin.py`文件中创建一个新的类,该类继承自`...
### Django Xadmin Action 兼容自定义Model权限教程 #### 背景介绍 Django Xadmin 是基于 Django 的一个非常强大的管理插件框架,它提供了丰富的功能来增强 Django admin 的用户体验与管理效率。在实际项目开发过程...
在Django框架中,Model是ORM(对象关系映射)的核心部分,用于定义数据库表的结构。外键(ForeignKey)是关系数据库中的一种概念,它允许一个表引用另一个表的主键,从而建立两个表之间的关联。然而,在某些情况下,...
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,...