14

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

查找所有没有该字段的对象怎么''样?

4

3 回答 3

17

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

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 中它被命名为“长度”。

于 2013-03-29T18:06:22.263 回答
9

从 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)
于 2017-03-27T22:45:44.283 回答
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 文档中的Length()

于 2021-07-06T16:35:15.167 回答