Django Admin后台datatable的select选择字段无数据显示问题求助
解决步骤
- 修正Admin配置错误
删除drugs/admin.py中fields = ('drug_type',)这行配置:该配置用于控制新增/编辑页的展示字段,仅保留drug_type会导致编辑页其余字段无法正常显示,属于错误冗余配置。 - 强制渲染choices字段的显示值
Django会为所有带choices属性的字段自动生成get_字段名_display方法,用于返回映射后的可读值,直接将该方法加入list_display即可:
class DrugAdmin(ImportExportModelAdmin): list_display = ['drug_id', 'name', 'get_drug_type_display', 'amount'] # 自定义列显示名称,可选 get_drug_type_display.short_description = '药品类型' # 暂时注释form配置排除表单冲突影响,验证生效后可按需恢复 # form = DrugForm list_per_page = 20 search_fields = ['drug_id', 'name', 'drug_type', 'brand', 'description']
- 校验数据一致性
你的自定义jQuery DataTable显示正常说明数据库存储的值没有问题,但仍需确认所有drug_type字段的存储值与drug_types_list中定义的键(pills/pellets/lozenges)完全匹配,大小写、拼写均不能有差异。如果存在不在选项范围内的旧数据,需要补充对应choices选项或修正旧数据。 - 排查插件冲突
如果修改后仍无显示,临时将DrugAdmin的父类从ImportExportModelAdmin替换为Django原生的admin.ModelAdmin,确认是否为django-import-export插件导致的渲染冲突。 - 生效验证
所有修改完成后重启Django服务,清空浏览器缓存后重新访问Admin页面即可。
可选优化
drugs/forms.py中drug_type的choices配置属于冗余项:Model层已经定义了choices规则,ModelForm会自动继承该配置,可删除widget中choices=drug_types_list参数避免潜在冲突。
内容的提问来源于stack exchange,提问作者William Le
相关产品推荐
相关产品推荐

