Django报错FieldError:ForeignKey不支持icontains查询如何解决?
问题解决:Django后台搜索ForeignKey字段触发FieldError错误
错误原因
你在BookAdmin的search_fields中直接指定了author这个ForeignKey字段,Django默认会对搜索字段使用icontains查找规则,但ForeignKey类型字段不支持该查找方式,必须明确关联到关联模型的具体字段才能进行搜索。
解决方案
修改BookAdmin里的search_fields配置,通过**双下划线(__)**关联到Author模型的first_name和last_name字段,以此实现按作者姓名搜索书籍的需求。
修改后的admin.py代码
class BookAdmin(admin.ModelAdmin): list_display = ('title', 'rating', 'author','is_bestselling',) list_display_links = ('title', 'rating',) # 关联Author模型的具体字段实现搜索 search_fields = ('title', 'rating','author__first_name', 'author__last_name',) list_filter = ('rating', 'is_bestselling',) prepopulated_fields = { 'slug': ('title',) } class AuthorAdmin(admin.ModelAdmin): list_display = ('first_name', 'last_name',) list_display_links = ('first_name', 'last_name',) search_fields = ('first_name', 'last_name',)
补充说明
如果需要支持作者全名的模糊匹配(比如搜索"张三"能匹配到对应姓名的作者),上述配置同时搜索author__first_name和author__last_name就能覆盖姓名的各个部分,满足基本搜索需求。
内容的提问来源于stack exchange,提问作者Deep joshi
相关产品推荐
相关产品推荐

