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 はすべての%と を置き換えます_ドキュメントから:

これは、物事が直感的に機能する必要があることを意味するため、抽象化が漏れることはありません。たとえば、パーセント記号を含むすべてのエントリを取得するには、パーセント記号を他の文字として使用します。

追加の方法を使用することをお勧めします。ハックに見えますが、実際には生のSQLではありません。

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