2009-04-20 10 views
30

मैं Django में ऑब्जेक्ट्स को पुनर्प्राप्त करने के लिए "AND" फ़िल्टर कैसे बना सकता हूं? उदाहरण के लिए मैं एक पंक्ति को पुनः प्राप्त करना चाहता हूं जिसमें एक ही क्षेत्र में दो शब्दों का संयोजन हो।मैं Django फ़िल्टर में और कैसे उपयोग करूं?

उदाहरण के लिए निम्नलिखित SQL क्वेरी करता है वास्तव में जब मैं mysql डेटाबेस पर चला है कि:

select * from myapp_question 
where ((question like '%software%') and (question like '%java%')) 

कैसे आप फ़िल्टर का उपयोग कर Django में यह पूरा करते हैं?

उत्तर

59
mymodel.objects.filter(first_name__icontains="Foo", first_name__icontains="Bar") 

अद्यतन: लंबे समय के बाद से मैं इस जवाब लिखा और कुछ Django किया है, लेकिन मैं इस दिन का सबसे अच्छा तरीका डेविड बर्गर की तरह क्यू वस्तु विधि का उपयोग करने के लिए है करने के लिए यकीन है कि यहाँ से पता चलता: stackoverflow.com/ एक/770078/63097

+3

यह Django 1.6 और पोस्टग्रेज़ में मेरे लिए _not_ काम नहीं करता है। जब भी दो या दो से अधिक वही कीवर्ड होते हैं, तो मुझे "सिंटेक्स त्रुटि: कीवर्ड तर्क दोहराया जाता है"। डेविड बर्गर द्वारा क्यू के साथ केवल समाधान ही काम करता है। – margusholland

+0

@margusholland उत्तर मेरे लिए Django 1.6 और पोस्टग्रेस के साथ काम करता है। क्या आप अपनी क्वेरी पोस्ट कर सकते हैं। यह क्यू ऑब्जेक्ट विधि के रूप में आधिकारिक है। https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships – Medorator

+1

मेरे पास एक छोटा देश कोड फ़ील्ड वाला एक मॉडल देश है (सीसी_शॉर्ट): >>> देश = Country.objects.filter (cc_short__icontains = 'ए', cc_short__icontains = 'B') फ़ाइल "", रेखा 1 सिंटेक्स त्रुटि: कीवर्ड तर्क दोहराया गया – margusholland

10

आप कर सकते हैं Django में श्रृंखला फिल्टर भाव:

q = Question.objects.filter(question__contains='software').filter(question__contains='java') 

आप "Chaining Filters" पर Django डॉक्स में अधिक जानकारी पा सकते हैं।

+2

यह उत्तर आपको अपने परिदृश्य के आधार पर गलत परिणाम दे सकता है। फिल्टर बनाम चेनिंग फ़िल्टर में ',' का उपयोग करके अलग-अलग परिणाम हो सकते हैं। आगे पढ़ने: [SO उत्तर] (http://stackoverflow.com/a/11025652/781695) और [आधिकारिक दस्तावेज़] (https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning -मल्टी-मूल्यवान संबंध) – Medorator

57

पूर्णता के लिए, चलो बस Q वस्तु विधि का उल्लेख:

from django.db.models import Q 
criterion1 = Q(question__contains="software") 
criterion2 = Q(question__contains="java") 
q = Question.objects.filter(criterion1 & criterion2) 

नोट यहां अन्य उत्तर सरल और बेहतर आपके उपयोग के मामले के लिए अनुकूलित कर रहे हैं, लेकिन अगर एक समान है, लेकिन थोड़ा और अधिक जटिल समस्या के साथ किसी (जैसे "नहीं" या "या" की आवश्यकता है) यह देखता है, यहां संदर्भ होना अच्छा है।

+0

बहुत रोचक! –

+0

बस अपनी गुजरने वाली टिप्पणी का उल्लेख करना चाहता था मेरी मदद की। धन्यवाद! – Alfonsol

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