Django ORM - 百分号表示喜欢

nig*_*ler 5 sql django orm django-queryset

在我的网站上,用户应该能够过滤数字,例如*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)
Run Code Online (Sandbox Code Playgroud)

San*_*4ez 7

是的,Django取代了所有%_.来自docs:

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

我建议你使用额外的方法.它不是真正的原始sql,虽然看起来很hacky:

YourModel.objects.extra(where=['title LIKE %s'], params=['%123%321%'])
Run Code Online (Sandbox Code Playgroud)