2012-01-17 20 views
9

क्या डीजेंगो क्वेरी एक्सप्रेस (उदा। Q(first_name="Jordan"), जहां Qdjango.db.models.Q है) और बिटवाई या उन्हें एक साथ लेने का कोई तरीका है?पायथन सूची बिटवाई ऑपरेशंस

दूसरे शब्दों में, मैं कुछ इस तरह है:

search_string = "various search terms" 

और मैं ऐसा करना चाहते हैं:

search_params = [Q(description__icontains=term) for term in re.split(r'\W', search_string)] 
search_params = something_magical(search_params) 
results = Record.objects.filter(search_params) 

जहां search_params अब Q(description__icontains="various") | Q(description__icontains="search" | Q(description__icontains="terms"

के बराबर है मैं जानता हूँ कि यह होगा इस तरह के एक समारोह के साथ संभव हो:

def something_magical(lst): 
    result = lst[0] 
    for l in lst[1:] 
     result |= l 
    return result 

तो मुझे आश्चर्य है कि यह कार्यक्षमता पहले ही पाइथन में बनाई गई है (और मुझे लगता है कि यह मेरे फ़ंक्शन से अधिक अनुकूलित है)।

हालांकि मुझे इस एप्लिकेशन के लिए इसमें दिलचस्पी है, लेकिन मुझे सैद्धांतिक रूप से इसमें दिलचस्पी है।

+0

मुझे नहीं लगता कि ऐसा डीजेंगो ऑपरेटर है ... लेकिन आप केवल सभी "या" प्रश्नों को कर सकते हैं और फिर परिणामों को गठबंधन करने के लिए पाइथन सेट ऑपरेटर का उपयोग कर सकते हैं? (http://docs.python.org/library/sets.html#set-objects) –

+0

@ रिचर्डग्रीन जो बहुत बदसूरत प्रश्न बना सकते हैं –

उत्तर

19

आप शायद

import operator 
from functools import reduce # Python 3 
search_params = reduce(operator.or_, search_params, Q()) 

यह चाहते स्थापित करेंगे थोड़ा-वार या (|) सभी वस्तुओं के बीच search_params में, एक खाली हालत Q() के साथ शुरू।

+0

अच्छा! इस तरह की चीजें मेरे प्यार पाइथन को और अधिक बनाती हैं। –

+0

'कम करें' और 'मानचित्र' के साथ खेलने के दौरान बस थोड़ी देर बिताई। –

+0

ग्रेट आपको यह पसंद है! आप शायद [itertools] (http://docs.python.org/library/itertools.html) का भी आनंद लेंगे। –

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