首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

django怎么使ForeignKey字段显示树状结构

2013-03-13 
django如何使ForeignKey字段显示树状结构版权所有,转载请注明出处:http://guangboo.org/2013/03/11/how-to

django如何使ForeignKey字段显示树状结构

版权所有,转载请注明出处:http://guangboo.org/2013/03/11/how-to-display-tree-with-foreignkey-for-django

django为我们提供了丰富的Field,这些Field可以方便的与数据库的字段进行对应和转换,加上django admin的强大功能,几乎让我们不需要编写任何后台代码,就可以让我们轻松实现对后台的管理。本文主要是根据实际需求,对ForeignKey这Field,在admin后台界面的展示效果进行修改,使可以改变原来直板的下拉框,而已树桩结构来展示。

在很多web系统中,我们经常会使用“Category”来对类别进行定义,并且Category还是支持多层次的,二期层次的深度也不错限制,这样就要Category类是自引用的,即Category类有一个类似于Parent的Cateogry引用。因此在对Category进行定义是常常是这样的:

为了使得parent字段能够展示成树状结构,我们需要自己变一些代码,使得django能够识别出该结构。事实上,ModelAdmin有一个方法formfield_for_dbfield是我们可以利用的,我们可以重载该方法,并重新绑定parent的html控件。这个控件需要时我们自己定义的select控件,控件的内容需要时Category表中数据的树状形式。

默认的ForeignKey一般都是转换成django的Select控件,这个控件定义在django.forms.widgets模块下,我们可以继承这个控件实现自己的TreeSelect控件。首先我们先要从数据库中把Category数据都提取出来,并在内存总构建树结构。但由于select控件只能通过option或optiongroup来展示数据,再没有其他字控件,因此我们可以通过空格或缩进来表示层数性,就像python使用缩进表示程序块一样。因此,提取Category数据的代码如下:

热点排行