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

时间:2013-03-29 17:35:41

标签: python sql django

我有一个带有文本字段的模型。我想进行一次查找,返回该字段中包含长度为7或更多字符串的所有项目。可能的?

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

3 个答案:

答案 0 :(得分:15)

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

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”。

答案 1 :(得分:4)

从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)

答案 2 :(得分:0)

从 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()