2010-06-02 15 views
7

मैं शब्दों की खोज के लिए फ़िल्टर icontains का उपयोग कर रहा हूं, लेकिन मैं केवल यह पूरे शब्दों से मेल खाना चाहता हूं। जैसे अगर मैंने यकृत की खोज की तो मैं इसे डिलीवरी वापस नहीं करना चाहूंगा।django फ़िल्टर icontains केवल पूरे शब्द से मेल खाते हैं

अपनी क्वेरी इस

MyModel.objects.filter(title__icontains=search_word) 

मैं फिल्टर __search देखा है की तरह लग रहा है, लेकिन इस वापस 3 वर्ण या उससे कम और साइट मैं निर्माण कर रहा हूँ के साथ परिणाम नहीं लाती है जिसके लिए खोजा जा सकता है इनमें से एक बहुत कुछ शामिल उदाहरण के लिए 'बीबीसी'

मुझे डीबी तक पहुंच नहीं है लेकिन अगर कोई जानता है कि मैं इसे कोड में कैसे अक्षम कर सकता हूं तो मुझे इसे वैकल्पिक रूप से उपयोग करने के लिए स्विच करने में खुशी होगी।

+1

शायद आप [regex] (http://docs.djangoproject.com/en/dev/ref/models/querysets/#iregex) का उपयोग कर सकते हैं, या अपने प्रारंभ और अंत में रिक्त स्थान जोड़ सकते हैं 'search_word' स्ट्रिंग? –

+0

मैं रिक्त स्थान जोड़ने के बारे में सोच रहा था लेकिन अगर शीर्षक केवल 1 शब्द था या शीर्षक शीर्षक की शुरुआत या अंत में दिखाई देता था तो यह काम नहीं करेगा। मैं regex के माध्यम से यह कैसे करूँगा? – John

उत्तर

6

Regexp आमतौर पर पर्याप्त हैं: http://docs.djangoproject.com/en/dev/ref/models/querysets/#regex

कृपया ध्यान दें नियमित अभिव्यक्ति वाक्यविन्यास उपयोग में डेटाबेस बैकेंड का है कि।

अजगर (SQLite) में regexp होगा:

\b(word)\b 

MySQL में तुम हो:

mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1 
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0 
+1

http://docs.djangoproject.com/en/dev/ref/models/querysets/#iregex के साथ यह मेरी समस्या हल – John

-3

ऐसा लगता है जैसे आप एक केस-असंवेदनशील सटीक मिलान चाहते हैं।

MyModel.objects.filter(title__iexact=search_word) 

http://docs.djangoproject.com/en/dev/ref/models/querysets/#lookup-iexact

+0

यह काम नहीं करेगा क्योंकि मैं अभी भी एक स्ट्रिंग के हिस्से की खोज करना चाहता हूं लेकिन ixact को पूरी स्ट्रिंग को मिलान करने की आवश्यकता है। उदाहरण के लिए यदि मेरा शीर्षक 'यह एक परीक्षण शीर्षक है' तो मैं इसे खोजना चाहूंगा यदि मैंने 'टेस्ट टाइटल' – John

+0

देखा है। आप इसे 'टेस्ट टाइटल' ढूंढना चाहते हैं लेकिन 'शीर्षक नहीं'। समझ गया। –

+0

हाँ यह सही है। – John

0

मामले आप और बाकी सेवा या डीआरएफ के साथ लागू किया है में, आप फ़िल्टर कर सकते हैं पूरे शब्दों के अनुसार $http.get(uri, {'params': {'display_name__iregex': '[[:<:]]word[[:>:]]'})

बेशक, display_name Tastypie Resour में फ़िल्टर करने के लिए सक्षम होना चाहिए सीई की मेटा क्लास filtering = {'display_name': ALL,}

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