在伪查询中,它看起来像这样:
User.objects.filter(username != username.strip())
与此搜索匹配的用户名示例:
"你好">
"你好">
"你好">
与此搜索不匹配的用户名示例:
"你好">
"你好世界">
示例并不详尽(例如,空白可以是制表符、换行符等形式(。
为什么在数据库中使用前导空格和尾随空格存储用户名?在插入它们之前对它们进行修剪,而不是在数据库中允许脏数据。
但要直接回答您的问题,您不需要使用extra
来进行正则表达式查找,因为查询集API本身就支持它
这应该做你想做的:
User.objects.filter(username__regex=r"s*" + user + r"s*")
SQLLite上的情况有点混乱,本机不支持正则表达式查找,但它仍然可以工作。
可以使用额外的。这就是PostgreSQL的情况:
User.objects.extra(where=["username != regexp_replace(username, '^s+|s+$', '', 'g')"])
from django.db.models import Q
User.objects.filter(Q(username__startswith=' ') | Q(username__endswith=' '))