有包含方法,但它表示:WHERE field LIKE '%10%'
。而我正好需要WHERE field LIKE '10__8__0__'
。Django query how to write:WHERE field LIKE'10__8__0__'?
謝謝!
編輯:
我的意思是字符串是'10xx8xx0xx'
,其中x - 任何符號
有包含方法,但它表示:WHERE field LIKE '%10%'
。而我正好需要WHERE field LIKE '10__8__0__'
。Django query how to write:WHERE field LIKE'10__8__0__'?
謝謝!
編輯:
我的意思是字符串是'10xx8xx0xx'
,其中x - 任何符號
對不起,我忘了澄清我想要的東西去做。看到我的編輯 – 2011-12-27 11:56:35
這是有效的,但因爲我要搜索'%query%',所以我決定只使用field__contains – radtek 2014-12-15 14:25:11
這比__contains更靈活,爲什麼不在默認情況下包含在Django中?它應該在django中添加,而不是替換__contains。 – 2016-03-08 14:27:54
執行您打算執行搜索的最簡單方法是定期表達:
MyModel.objects.filter(field__regex=r'^10..8..0..$')
編輯:
我的解決辦法是可能比LIKE慢得多。但問題是,django ORM不允許輕鬆訪問LIKE
。如果startswith
或endswith
已經足夠滿足您的需要,那將是最簡單的。
它比'LIKE'慢得多,至少對於MySQL來說。 – DrTyrsa 2011-12-27 12:33:19
這可行,但效率不如此類。爲什麼不存在這樣的東西? MyModel.objects.filter(field__like = '10%8 0%')。如果ORM不檢查字符串,你可以這樣做:MyModel.objects.filter(field = '10%8&0%') – Goin 2011-12-27 12:37:53
@DTTyrsa慢得多,但它也是你的解決方案o_O。 Till-Backhaus解決方案後的解決方案 – Goin 2011-12-27 12:41:16
在SQL中,你可以查詢,如:
WHERE field LIKE '10??8??0??'
嘗試在你的Django過濾器。
這在django的默認查找中是不可能的。因此,我實現了類似於django的http://pypi.python.org/pypi/django-like – Goin 2011-12-29 02:03:03
您可以使用extra
做到這一點:
MyModel.objects.extra(where=["column_name LIKE '%10%"])
注意column_name
是在數據庫中的列名,而不是在你的Django模型中的字段名稱。在許多情況下,字段名稱和列名稱將相同,但如果不同,請注意使用列名稱。
通過'raw'做到這一點,https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw – Ahsan 2011-12-27 13:49:11