मैं मानों की सूची के साथ Django क्वेरी को कैसे फ़िल्टर कर सकता हूं?


291

मुझे यकीन है कि यह एक तुच्छ ऑपरेशन है, लेकिन मैं यह पता नहीं लगा सकता कि यह कैसे किया जाता है।

वहाँ इस से कुछ होशियार हो गया है:

ids = [1, 3, 6, 7, 9]

for id in ids:
    MyModel.objects.filter(pk=id)

मैं उन सभी को एक क्वेरी में कुछ इस तरह से प्राप्त करना चाहता हूं:

MyModel.objects.filter(pk=[1, 3, 6, 7, 9])

मैं मानों की सूची के साथ Django क्वेरी को कैसे फ़िल्टर कर सकता हूं?



जवाबों:


539

से Django प्रलेखन :

Blog.objects.filter(pk__in=[1, 4, 7])

यदि हम खाली सूची पास करते हैं या कोई रिकॉर्ड नहीं देते हैं तो क्या यह त्रुटि उठाएगा?
राकमो

@OmkarDeshpande नहीं
डायलनयुंग

@DylanYoung तो यह कोई रिकॉर्ड नहीं लौटेगा
राकोमो

2
@OmDDeshpande बिल्कुल। हालाँकि, यदि आप कॉल करते हैं get(), तो आपको निश्चित रूप से एक ObjectDoesNotExist त्रुटि मिलेगी।
डायलनयुंग

48

जब आपके पास मदों की सूची होती है और आप सूची से संभावित मूल्यों की जांच करना चाहते हैं तो आप उपयोग नहीं कर सकते =

Sql क्वेरी ऐसी होगी SELECT * FROM mytable WHERE ids=[1, 3, 6, 7, 9]जो सत्य नहीं है। आपको इसके लिए inऑपरेटर का उपयोग करना होगा इसलिए आप SELECT * FROM mytable WHERE ids in (1, 3, 6, 7, 9)उस तरह के लिए होंगे जैसे कि Django __inऑपरेटर प्रदान करते हैं ।


20
एक छोटे से स्पष्टीकरण के लिए +1। जबकि मुझे पता है कि मैं डॉक्स पढ़ सकता हूं, इसका मतलब यह नहीं है कि मैं डॉक्स को समझ गया हूं।
ऑस्टिन ए

6

से Django प्रलेखन :

Blog.objects.in_bulk([1])
{1: <Blog: Beatles Blog>}

Blog.objects.in_bulk([1, 2])
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>}

Blog.objects.in_bulk([])
{}

Blog.objects.in_bulk()
{1: <Blog: Beatles Blog>, 2: <Blog: Cheddar Talk>, 3: <Blog: Django Weblog>}

Blog.objects.in_bulk(['beatles_blog'], field_name='slug')
{'beatles_blog': <Blog: Beatles Blog>}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.