基于文件名查询Django模型报错:FileField不支持'name'查询
解决Django FileField查询时"Unsupported lookup 'name'"的错误
问题场景
获取文件名:
filename = 'myfile.txt'
执行以下查询代码时触发错误:
summernoteimages = UserFile.objects.filter( Q(file__name=filename) )
错误信息:
Unsupported lookup 'name' for FileField or join on the field not permitted.
解决方案
Django的FileField不支持__name这个查询字段,可通过以下两种方式解决:
方法1:使用
__filename查询(Django 3.0及以上版本支持)
这是Django官方提供的用于提取文件名的专用lookup:summernoteimages = UserFile.objects.filter( Q(file__filename=filename) )方法2:通过
__endswith匹配文件名
若使用的Django版本较低,可通过路径后缀匹配文件名(注意:若不同路径下存在同名文件,会匹配到多个结果,需结合其他条件过滤):summernoteimages = UserFile.objects.filter( Q(file__endswith=filename) )
原因说明
FileField存储的是文件的完整路径,__name并非Django官方支持的查询字段。__filename是专门针对文件名设计的查询方式,而__endswith则是通过匹配路径末尾的文件名来实现查询。
内容的提问来源于stack exchange,提问作者Jason Howard
相关产品推荐
相关产品推荐

