Django Admin中通过一对一关联字段搜索报错,需保留该搜索功能
解决Django Admin中OneToOne关联字段搜索报错的问题
这个问题我之前也碰到过,核心原因是:你直接在search_fields里写关联模型字段名owner时,Django无法自动确定要搜索关联模型(Owner)中的哪个具体字段,而默认的icontains查找规则对整个关联模型实例不适用,所以才会抛出Related Field got invalid lookup: icontains的错误。
解决方案:使用双下划线指定关联模型的具体字段
在Django的查询语法中,双下划线__用来跨关联模型访问字段,你只需要把search_fields里的owner替换成owner__[要搜索的Owner模型字段名]即可。比如你要通过Owner的name字段来搜索,修改后的代码如下:
class EntityAdmin(admin.ModelAdmin): # 其他配置... search_fields = ('email', 'name', 'owner__name')
扩展说明
如果Owner模型还有其他可搜索的字段(比如email),你也可以把它们添加进去,实现多字段关联搜索:
search_fields = ('email', 'name', 'owner__name', 'owner__email')
这样设置后,在Entity的Admin页面搜索时,输入的关键词会同时匹配Entity自身的email、name,以及关联Owner的name(和你添加的其他Owner字段),完美实现你需要的关联搜索功能。
内容的提问来源于stack exchange,提问作者user3541631
相关产品推荐
相关产品推荐

