考虑到Django 1.0.2 admin的功能实在太弱了,今天冒着大风险,将某系统的Django进行了升级(升级至Django 1.2.7)。

Django 1.2.7 admin在使用ManyToManyField的时候,默认使用垂直filter_vertical方式进行显示与选择。此方式在选项比较多的时候,难以直观的看出哪些选项被选中,如下图所示:

决定使用更直观的方式,filter_horizontal,设置比较简单,只要在admin.py里对应的模块下,添加类似如下内容即可:

filter_horizontal = ['example']

filter_horizontal显示方式如下图所示:

但是,当我设置了此选择后,发现出现了奇怪的问题,如下图:

没有报错,但也没有出现设想中的选择框。经过研究,发现,原来是因为我对应的字段ips,在models.py里定义的时候,verbose_name使用了字符串,而不是unicode,如下:

ips = models.ManyToManyField( IPData, verbose_name = "使用IP" )

调整为

ips = models.ManyToManyField( IPData, verbose_name = u"使用IP" )

问题解决。使用string是因为我们这些是一些老旧的系统,新项目必须果断的抛弃string,拥抱unicode吧!

您可能还喜欢以下文章


关于我

热爱开源、分享。目前主要从事混合云、数据库 SaaS 等运维开发及相关团队管理工作。