加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

django 非常实用的无限级分类功能

发布时间:2020-12-17 17:29:20 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 1 2 3 4 5 6 7 ? ?? def ?htmlpath ( self ) : ? ? ? ? paths? = ? [ ] ? ? ? ?? for ?p? in ? self . path . split ( ':' ) : ? ? ? ? ? ? c? = ?Art

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

1
2
3
4
5
6
7
? ?? def?htmlpath ( self ):
? ? ? ? paths? =? [ ]
? ? ? ?? for?p? in? self. path. split ( ':' ):
? ? ? ? ? ? c? =?ArticleCategory. objects. get (id__exact =p )
? ? ? ? ? ? url? =?reverse ( 'cms.article.list' ,?kwargs = { 'cid':c. id } )
? ? ? ? ? ? paths. append ( '<a href="%s" target="_blank">%s</a>'?%? (url ,?c. name ) )
? ? ? ?? return? " > ". join (paths )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from?django. db. models. signals? import?pre_save

class?ArticleCategory (models. Model ):
? ? name? =?models. CharField (max_length = 50 )
? ? parent? =?models. ForeignKey ( 'self' ,?null = True ,?blank = True ,?related_name = 'children' )?? ?
? ? path? =?models. CharField (max_length = 255 ,??null = True ,?blank = True )


? ?? def? __unicode__ ( self ):
? ? ? ?? if? self. id? ==? self. path:
? ? ? ? ? ?? return? self. name
? ? ? ?? else:
? ? ? ? ? ?? return? self. node

? ??
? ?? def?_node ( self ):
? ? ? ? indent_num? =? len ( self. path. split ( ':' ) )?- 1
? ? ? ? indent? =? '....'?* indent_num
? ? ? ? node? =?u '%s%s'?%? (indent ,? self. name )
? ? ? ?? return?node
? ? node? =? property (_node )


? ?? class?Meta:
? ? ? ? ordering? =? [ 'path' ]


? ?? #设置在model中的用途是,是在所有节点保存时递归的循环下去,更新所有的节点的路径
? ?? def?save ( self ,?* args ,?** kwargs ):
? ? ? ?? super (ArticleCategory , self ). save (*args ,?** kwargs )

? ? ? ?? if? self. parent:
? ? ? ? ? ?? self. path? =? '%s:%s'?%? ( self. parent. path ,? self. id )
? ? ? ?? else:
? ? ? ? ? ?? self. path? =? self. id

? ? ? ? childrens? =? self. children. all ( )
? ? ? ?? if? len (childrens )? >? 0:
? ? ? ? ? ?? for?children? in?childrens:
? ? ? ? ? ? ? ? children. path? =? '%s:%s'?%? ( self. path ,?children. id )
? ? ? ? ? ? ? ? children. save ( )
? ? ? ?? super (ArticleCategory ,?** kwargs )

#信号触发,更新
def?inital_articlecategory_path (sender ,?instance ,??**kwargs ):
? ?? if?instance. id:
? ? ? ?? if?instance. parent:
? ? ? ? ? ? instance. path? =? '%s:%s'?%? (instance. parent. path ,?instance. id )
? ? ? ?? else:
? ? ? ? ? ? instance. path? =?instance. id
pre_save. connect (inital_articlecategory_path ,?sender =ArticleCategory )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class?ArticleCategoryAdmin (admin. ModelAdmin ):
? ? list_display? =? [ 'treenode' , 'patha' , 'id' ,? ]
? ? ordering? =? [ 'path' ]

? ?? def?patha ( self ,?obj ):
? ? ? ?? if?obj. parent:
? ? ? ? ? ?? return?u '%s > %s'?%? (obj. parent ,?obj. name )
? ? ? ?? return?obj. name

? ? patha. short_description? =? 'path'
? ? patha. allow_tags? =? True
? ??

? ?? def?treenode ( self ,?obj ):
? ? ? ? indent_num? =? len (obj. path. split ( ':' ) )?- 1
? ? ? ? p? =? '<div style="text-indent:%spx;">%s</div>'?%? (indent_num* 25 ,?obj. name )
? ? ? ?? return?p

? ? treenode. short_description? =? 'tree path'
? ? treenode. allow_tags? =? True
admin. site. register (ArticleCategory ,?ArticleCategoryAdmin )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class?ArticleCategory (models. Model ):
? ? name? =?models. CharField (max_length = 50 )
? ? parent? =?models. ForeignKey ( 'self' ,?** kwargs ):
? ? ? ?? #先保存数据,如果是新添加的数据,放在第一行是用来获得id,因为id是path的重要组成
? ? ? ?? super (ArticleCategory ,?** kwargs )
? ? ? ?? if? self. parent:
? ? ? ? ? ?? self. path? =? '%s:%s'?%? ( self. parent. path ,? self. id )
? ? ? ?? else:
? ? ? ? ? ?? self. path? =? self. id

? ? ? ?? #更新完当前节点path后,要进行一次保存,否则在编辑类别时,子分类循环保存父类path不是最新的
? ? ? ?? super (ArticleCategory ,?** kwargs )

? ? ? ? childrens? =? self. children. all ( )
? ? ? ?? if? len (childrens )? >? 0:
? ? ? ? ? ?? for?children? in?childrens:
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? children. path? =? '%s:%s'?%? ( self. path ,?children. id )

? ? ? ? ? ? ? ? children. save ( )

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读