我有一个我无法控制的表,但需要从中进行选择。字段“building”是一个 varchar,并且在我的(非托管)django 模型中也是这样定义的。但从该表中进行选择时,应将其视为整数(有“000100”之类的值,甚至末尾有空格)。
我需要一个像这样的简单过滤器:
.annotate(CastInt("building")).filter(building__castint__exact=my_id)
唯一的问题是,CastInt 不存在。怎样才能实现这一目标呢?我正在研究 .extra() (我们不应该再使用它,因为它已被弃用)和 RawSQL,但希望找到一个仅使用 Django ORM 的解决方案,而不需要自定义编写的 SQL?
编辑:目前使用来自here https://stackoverflow.com/questions/4348124/django-orm-filter-by-extra-attribute(在评论中):
Address.objects.extra(where=('CAST(TRIM(building) AS UNSIGNED)=%s',),
params=(building_no, ))
有效,但很丑。
编辑二:查看我接受的答案 - 使用我的第二好朋友,正则表达式。
就这么简单:使用正则表达式查询
regex = r'^0{0,4}%s ?$' % building_no
address = Address.objects.filter(building__iregex=regex)\
欢迎任何有关性能的提示...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)