我使用Django,ORM。
我不想转义字符“%”。
name=''
author=''
annotation = 'harry%magic%school'
criterion_name = Q(name__contains=cleaned_data['name'])
criterion_author = Q(author__contains=cleaned_data['author'])
criterion_annotation = Q(annotation__contains=cleaned_data['annotation'])
Book.objects.filter(criterion_name, criterion_author, criterion_annotation)
我得到'%harry\%magic\%school%'
:
select name, author, annotation from books
where name LIKE '%%' AND
author LIKE '%%' AND
annotation LIKE '%harry\%magic\%school%'
我想得到'%harry%magic%school%'
:
select name, author, annotation from books
where name LIKE '%%' AND
author LIKE '%%' AND
annotation LIKE '%harry%magic%school%'
如何修复它?
1条答案
按热度按时间mm5n2pyu1#
正如你在
docs
中看到的,它会自动转义%
和_
,没有选项可以通过使用内置查找来不转义它。因此,您可以使用
.extra
来编写原始SQL
,这在大多数情况下都是不可取的,即使对于最复杂的情况也是如此。或者,编写自定义查找:lookups.py
views.py
这将生成以下查询(
print
的输出):**Obs:**您的所有条件都是针对
name
字段的,所以我只是假设它是错误的,并为每个变量更改它以匹配其各自的字段。