我有一个带有文本字段的模型。我想做一个查找,它将返回该字段中长度为 7 或更多的字符串的所有项目。可能的?
查找所有没有该字段的对象怎么''
样?
我认为正则表达式查找可以帮助您:
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 中它被命名为“长度”。
从 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)
从 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()