2010-07-11 13 views

उत्तर

26

के बीच का अंतर Django QuerySet docs इस पर बहुत स्पष्ट हैं:

get(**kwargs)¶

Returns the object matching the given lookup parameters, which should be in the format described in Field lookups.

get() raises MultipleObjectsReturned if more than one object was found. The MultipleObjectsReturned exception is an attribute of the model class.

get() raises a DoesNotExist exception if an object wasn't found for the given parameters. This exception is also an attribute of the model class.

filter(**kwargs)

Returns a new QuerySet containing objects that match the given lookup parameters.

मूल रूप से मिल का उपयोग करके ऐसी केवल एक अद्वितीय वस्तु, और फिल्टर प्राप्त करना चाहते हैं जब आप सभी वस्तुओं है कि आपके देखने मानकों से मेल प्राप्त करना चाहते हैं।

+0

उत्तर उपयोगी है और मुझे कुछ चीजों को याद आया() जो सडोलन ने यहां बताया – Hafiz

5

इसके अलावा, एक तरफ ध्यान दें पर, यह मानते हुए पोल नहीं उपलब्ध है:

if mymodel=model.objects.get(name='pol').exists()==False: 
    print "Pol does not exist" 

आप मिल जाएगा: AttributeError: 'मॉडल' वस्तु कोई विशेषता 'मौजूद है'

लेकिन है:

if mymodel=model.objects.filter(name='pol').exists()==False: 
    print "Pol does not exist" 

आपको मिलेगा: पोल मौजूद नहीं है।

आईई। यदि आप एक ऑब्जेक्ट पा सकते हैं या नहीं, तो फ़िल्टर का उपयोग करने के आधार पर कुछ कोड चलाने के लिए चाहते हैं। कुछ कारणों से मौजूद है() QuerySet पर काम करता है लेकिन प्राप्त होने वाली विशिष्ट वस्तु नहीं।

3

नोट पर्दे के पीछे Django प्राप्त() विधि फिल्टर() विधि चलाता है, लेकिन सेट फिल्टर परिणाम वास्तव में जांच करता है कि कि एक रिकॉर्ड

0

यदि आप जानते हैं कि यह एक उद्देश्य यह है कि आपकी क्वेरी से मेल खाता है, उपयोग " प्राप्त"। अगर यह एक से अधिक है और इस

Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 143, in get 
return self.get_query_set().get(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 407, in get 
(self.model._meta.object_name, num)) 
MultipleObjectsReturned: get() returned more than one Poll -- it returned 2! 

तरह त्रुटि देता है अन्यथा, "फिल्टर" का उपयोग जो आप वस्तुओं की एक सूची देता है यह असफल हो जायेगी।

1

प्राप्त करें() एक ऑब्जेक्ट देता है जो लुकअप मानदंड से मेल खाता है।

फ़िल्टर() एक क्वेरीसेटसेट देता है जो मैच लुकअप मानदंड देता है।

उदाहरण के लिए, निम्नलिखित

Entry.objects.filter(pub_date__year=2006) 

Entry.objects.all().filter(pub_date__year=2006) 

जो फिल्टर() का अर्थ है के बराबर है थोड़ा महंगा ऑपरेशन है अगर मॉडल वर्ग की वस्तुओं की एक बड़ी संख्या है, जबकि मिल() प्रत्यक्ष दृष्टिकोण है।

स्रोत: Django making queries

[Django मॉडल परत में मिलता है और फिल्टर के बीच अंतर] (की
संबंधित मुद्दे