5

在我的网站上,用户应该能够过滤数字,例如*123*321*匹配“666 123 555 321 111”或LIKE '%123%321%'.

默认情况下,django 的 orm 会转义%-sign。我可以使用正则表达式或原始查询,但有一些解决方法吗?

UPD:我会把它放在这里以显示另一种方式。

integer_search = [] # for colorizing found substrings
if actual['integer']:
    integer_match = filter(None, actual['international'].split('*'))
    integer_search = integer_match
    integer_match = ''.join('%s[[:digit:]]*' % i for i in integer_match)
    integers = integers.filter(international__regex=integer_match)
4

1 回答 1

8

是的,Django 替换了所有的%and _。来自文档

这意味着事情应该直观地工作,因此抽象不会泄漏。例如,要检索包含百分号的所有条目,只需将百分号用作任何其他字符

我建议您使用额外的方法。它不是真正的原始 sql,虽然看起来很老套:

YourModel.objects.extra(where=['title LIKE %s'], params=['%123%321%'])
于 2012-05-30T06:14:35.540 回答