在伪查询中,它看起来像这样:
User.objects.filter(username != username.strip())
与此搜索匹配的示例用户名:
"你好"
"你好"
"你好"
与此搜索不匹配的示例用户名:
"你好"
"你好世界"
示例并非详尽无遗(即空格可以是制表符,换行符等形式)。
答案 0 :(得分:1)
extra。这就是PostgreSQL的样子:
User.objects.extra(where=["username != regexp_replace(username, '^\s+|\s+$', '', 'g')"])
答案 1 :(得分:1)
为什么要在数据库中使用前导和尾随空格存储用户名?在插入它们之前修剪它们,而不是在数据库中允许脏数据。
但是要直接回答您的问题,您不需要使用extra
进行正则表达式查找,因为查询集API natively supports it。
这应该做你想要的:
User.objects.filter(username__regex=r"\s*" + user + r"\s*")
SQLLite上的东西变得有些混乱,其中正则表达式查找不是原生支持的,但它仍然有效。
答案 2 :(得分:0)
from django.db.models import Q
User.objects.filter(Q(username__startswith=' ') | Q(username__endswith=' '))