Django:按文本字段的长度查找

Posted

技术标签:

【中文标题】Django:按文本字段的长度查找【英文标题】:Django: Lookup by length of text field 【发布时间】:2013-03-20 11:02:09 【问题描述】:

我有一个模型,上面有一个文本字段。我想做一个查找,它将返回该字段中长度为 7 或更多的字符串的所有项目。可能吗?

如何查找该字段不是'' 的所有对象?

【问题讨论】:

【参考方案1】:

从 Django 1.9 开始,Length 数据库函数可以注册为查询集查找:

from django.db.models import CharField
from django.db.models.functions import Length
CharField.register_lookup(Length, 'length')

这样您就可以通过以下方式使用它:

# Get authors whose name is longer than 7 characters
authors = Author.objects.filter(name__length__gt=7)

在官方 Django 3.2 文档中查看:Database Functions - Length()

【讨论】:

【参考方案2】:

从django 1.8开始,可以使用Length数据库功能:

from django.db.models.functions import Length
qs = ModelWithTextField.objects \
        .annotate(text_len=Length('text_field_name')) \
        .filter(text_len__gte=7)

【讨论】:

【参考方案3】:

我认为正则表达式查找可以帮助您:

ModelWithTextField.objects.filter(text_field__iregex=r'^.7,$')

或者你总是可以在 Django 模型上执行原始 SQL 查询:

ModelWithTextField.objects.raw('SELECT * FROM model_with_text_field WHERE LEN_FUNC_NAME(text_field) > 7')

其中 len_func_name 是 DBMS 的“字符串长度”函数的名称。例如在 mysql 中它被命名为“length”。

【讨论】:

正则表达式的好方法! 我想知道,用于长度检查的 SQL 是否可以通过 Django ORM 获得? 我想没有。发现了这个问题:link,还有另一个很好的决定是将长度存储在单独的列中,这是更好的性能方式。 绝妙的解决方案

以上是关于Django:按文本字段的长度查找的主要内容,如果未能解决你的问题,请参考以下文章

按文本字符长度对目录中的文件进行排序并复制到其他目录[关闭]

使用 django 迁移,如何更改 auth_permission 字段长度?

如何使用 hive 查询查找 hive json 数组字段的长度

如何将stackview一起用于标签和文本字段,其中文本字段的长度更长

根据嵌套对象字段的长度查找所有文档

Access 2010 中有限长度文本字段的富文本输入