python - Django 查询集 : filter by 'value LIKE column'

标签 python django django-orm

我有一个 SQL 查询来确定与给定输入字符串匹配的最长匹配前缀。用例是查找调用给定目的地的速率,该速率由数据库中的多行确定。最具体的匹配前缀是要使用的前缀。

所以在原始 SQL 中它看起来像这样:

SELECT * FROM rateplan_rates
WHERE '3212345789' LIKE CONCAT(prefix, '%')
ORDER BY CHAR_LENGTH(prefix) DESC LIMIT 1

在上面的示例中,目的地是 3212345789。在实际应用程序中,这是由缓存机制和更多内容支持的,但归根结底就是这样。

我想在我们的 Django 项目中完成同样的 API 调用,并且我知道我也可以在那里使用原始 SQL,但我想知道是否有办法在 Django“queryset-language”中做到这一点.

我被这个问题困扰了:

RateplanRate.objects \
    .annotate(prefix_length=Length('prefix'), prefix_match=Concat('prefix', '%')) \
    .filter('search_value LIKE prefix_match') \
    .order_by('-prefix_length')[0:1]

缺少的部分当然是search_value LIKE prefix_match。这是可能的还是我应该退回到原始 SQL?

最佳答案

我认为您正在寻找类似 icontains 的内容或contains

例如

RateplanRate.objects.filter(field__icontains='foobar')

关于python - Django 查询集 : filter by 'value LIKE column' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56218569/

相关文章:

python - 如何在 OpenCV 窗口中覆盖来自 Dlib 的面部关键点

python - 带有 View 集路由器查询集过滤的 Django REST 框架

python - 在 Spyder IDE 中释放 matplotlib 内存

python - 使用 Django 显示表格中的数据

python - 为什么 Django 根据谷歌是一个 'less secure' 应用程序?

django sweetpie 和跨域 json

Python 终止进程,退出代码为 -1073741819

python - Django:迁移到 NullBooleanField 失败并出现 IntegrityError "contains null values"

python - Django prefetch_相关的多个查询

python - 在 Django 中获取多对多关系中的第一个项目