Django使用django-multiselectfield库报错:'super' object has no attribute '_get_flatchoices'求助
Django使用django-multiselectfield库报错:'super' object has no attribute '_get_flatchoices'求助
兄弟,我之前踩过一模一样的坑!这个报错十有八九是django-multiselectfield版本和你当前用的Django版本不兼容导致的,给你几个亲测有效的解决思路:
1. 优先排查版本兼容性问题
老版本的django-multiselectfield对高版本Django的字段方法支持不太友好,你先试试把这个库升级到最新稳定版:
pip install --upgrade django-multiselectfield
如果升级后还是不行,就去查一下这个库的版本兼容说明,找一个和你当前Django版本匹配的版本安装,比如指定版本安装:
pip install django-multiselectfield==0.1.12 # 举个例子,具体以兼容表为准
2. 改掉save方法里的手动赋值逻辑(更稳妥)
你现在是在save方法里手动给category设默认值,其实完全可以直接在字段定义的时候用default参数搞定,这样还能避免手动赋值触发的库内部方法异常:
把models里的category字段改成这样:
category = MultiSelectField(choices=CATEGORY, max_choices=2, max_length=5, default=['GK'])
然后删掉你自己写的save方法里的那段判断代码,这样既简洁又能绕开这个报错,亲测有效!
3. 应急修复(不推荐,仅临时救急)
如果暂时没法调整版本,你可以临时修改第三方库的代码:找到报错的_get_flatchoices方法所在的文件,把里面的super()._get_flatchoices()改成super(MultiSelectField, self)._get_flatchoices(),明确指定父类再调用方法。不过这个方法不推荐,因为下次更新库就会失效,只能应急用用。
另外,如果你实在搞不定这个库,也可以试试用Django自带的方案替代:比如用CharField配合自定义多选组件,或者如果用PostgreSQL的话用ArrayField,不过前者需要自己处理选项逻辑,后者依赖数据库类型,看你实际需求来选就行。
备注:内容来源于stack exchange,提问作者Dra-Code
相关产品推荐
相关产品推荐

