2011-12-27 9 views
11

में विधि है, लेकिन इसका अर्थ है: WHERE field LIKE '%10%'। और मुझे बिल्कुल WHERE field LIKE '10__8__0__' की आवश्यकता है।Django पूछताछ कैसे करें: कहां फ़ील्ड '10__8__0__'?

धन्यवाद!

संपादित करें:

मेरा मतलब है स्ट्रिंग '10xx8xx0xx', x है - किसी भी प्रतीक

+1

इसे 'कच्चे', https://docs.djangoproject.com/en/dev/topics/db/sql/#django.db.models.Manager.raw – Ahsan

उत्तर

13

आप django-like के साथ ऐसा कर सकते हैं:

MyModel.objects.filter(field__like='10%8%0%') 

इसके अलावा, मैं एक संबंधित टिकट Django project site पर बनाया

+0

क्षमा करें, मैं यह स्पष्ट करना भूल गया कि मैं क्या चाहता हूं करने के लिए। मेरा EDIT –

+0

देखें यह काम करता है, लेकिन चूंकि मैं '% query%' की खोज करने जा रहा था, इसलिए मैंने केवल फ़ील्ड__कंट्स – radtek

+0

का उपयोग करने का निर्णय लिया है यह __contains से अधिक लचीला है, क्यों इसे डिफ़ॉल्ट रूप से Django में शामिल नहीं किया गया था? इसे django में जोड़ा जाना चाहिए और __contains को प्रतिस्थापित नहीं किया जाना चाहिए। –

5

आपके द्वारा किए जाने वाले खोज को करने का सबसे आसान तरीका नियमित रूप से है अभिव्यक्ति:

MyModel.objects.filter(field__regex=r'^10..8..0..$') 

संपादित करें:

मेरे समाधान संभवतः बहुत पसंद की तुलना में धीमी है। समस्या यह है कि django ORM LIKE तक आसान पहुंच की अनुमति नहीं देता है। startswith या endswith आपके उद्देश्यों के लिए पर्याप्त थे तो यह सबसे आसान होगा।

+0

यह कम से कम MySQL के लिए 'LIKE' से धीमा है। – DrTyrsa

+0

यह काम करता है, लेकिन यह उतना ही कुशल नहीं है जितना। ऐसा कुछ क्यों नहीं है? MyModel.objects.filter (field__like = '10% 8 और 0% ')। यदि ओआरएम स्ट्रिंग को स्कैप नहीं करता है तो आप इसे करने के लिए कर सकते हैं: MyModel.objects.filter (फ़ील्ड = '10% 8 और 0% ') – Goin

+0

@DrTyrsa बहुत धीमा है, लेकिन यह आपका समाधान o_O भी है। टिल-बैकहॉस समाधान – Goin

-1

एसक्यूएल में, आप इसे पसंद क्वेरी कर सकते हैं:

WHERE field LIKE '10??8??0??' 

कि कोशिश करो अपने Django फिल्टर में।

+0

django में डिफ़ॉल्ट लुकअप के साथ यह असंभव है। इसलिए मैं django- जैसे http://pypi.python.org/pypi/django- को लागू करता हूं – Goin

4

ऐसा करने के लिए extra उपयोग कर सकते हैं:

MyModel.objects.extra(where=["column_name LIKE '%10%"]) 

ध्यान दें कि column_name अपने Django मॉडल में फ़ील्ड नाम डेटाबेस में स्तंभ नाम के बजाय है। कई मामलों में, फ़ील्ड का नाम और कॉलम नाम वही होगा, लेकिन यदि वे भिन्न हैं, तो कॉलम नाम का उपयोग करने के लिए सावधानी बरतें।

संबंधित मुद्दे