Django 2.0.1自定义Admin界面:配置筛选控件后不生效求助
我来帮你一步步梳理这个问题,在Django 2.x版本里遇到Admin自定义配置不生效的情况,大多是几个容易忽略的小细节导致的:
1. 确认Admin类的继承与注册是否正确
你代码里写的class Admin:是错误的!Django的后台管理类必须继承自admin.ModelAdmin,而且要和你的模型完成绑定注册。比如你的模型叫Comment(举个实际场景的例子),正确的写法应该是:
from django.contrib import admin from .models import YourModel # 替换成你自己的模型类名 # 类名最好和模型对应,且必须继承admin.ModelAdmin class YourModelAdmin(admin.ModelAdmin): list_display = ('post', 'name', 'created_at') list_filter = ('keyword', 'name', 'created_at') ordering = ('created_at', ) search_fields = ('trackword', ) # 关键步骤!一定要把模型和自定义Admin类注册到后台 admin.site.register(YourModel, YourModelAdmin)
很多新手容易漏掉继承或者注册这一步,导致自定义配置完全不生效,后台还是用默认的Admin设置。
2. 检查配置中的字段名是否和模型完全匹配
比如你配置的list_filter = ('keyword', ...)、search_fields = ('trackword', ),要确保你的模型里确实存在这些字段,而且拼写完全一致(Django对字段名大小写敏感!)。如果字段名写错了,Django不会直接报错,但会忽略这个配置项,对应的控件自然不会显示。
举个例子:如果模型里的字段是track_word而不是trackword,那search_fields的配置就不会生效,搜索框也就不会出现。
3. 重启服务器并清空浏览器缓存
修改admin.py之后,必须重启你的Django开发服务器,不然代码的修改不会被加载。另外,有时候浏览器会缓存旧的后台页面,你可以用Ctrl+F5强制刷新页面,看看控件会不会正常显示。
4. 验证字段类型是否支持对应的Admin控件
比如list_filter对部分字段类型有要求,比如如果keyword是TextField类型,Django 2.0是支持的,但如果是更复杂的自定义字段,可能会出现兼容问题。你可以先把list_filter改成模型里确定有效的字段(比如created_at这种DateTimeField),测试筛选面板会不会出现,以此排除字段类型的问题。
5. 查看Django运行日志找线索
如果上面几步都没问题,你可以看看Django开发服务器的日志,有没有相关的警告信息。比如如果字段名不存在,Django会在日志里输出类似"Unknown field(s) (keyword) specified for YourModel"的警告,这时候就能直接定位到错误点。
我之前在Django 2.x版本里也遇到过类似的情况,大多是因为漏了注册或者字段名拼写错误,按上面的步骤排查应该就能解决问题。
内容的提问来源于stack exchange,提问作者Martin Duiceivic

