如何查找具有字段的所有实例:" username"与其剥离的"用户名"不相等

时间:2015-07-02 19:12:34

标签: django django-models django-queryset

在伪查询中,它看起来像这样:

User.objects.filter(username != username.strip())

与此搜索匹配的示例用户名:
"你好"
"你好"
"你好"

与此搜索不匹配的示例用户名:
"你好"
"你好世界"

示例并非详尽无遗(即空格可以是制表符,换行符等形式)。

3 个答案:

答案 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=' '))