考虑到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吧!

您可能还喜欢以下文章

关于老树

就职于网易在线游戏事业部,任系统运维工程师职位,负责公司部份基础服务及MMORPG、WEBGAME、手游等的运维工作;喜欢折腾Unix/Linux、开源技术、互联网产品。
VPS 使用 vultr,欢迎使用我的 referral link,我可以得到少许返利。

相关评论

comments powered by Disqus