Tuesday 15 June 2010

python - Django wildcard query -


मेरे पास मेरे आवेदन में निम्न तर्क है:

  प्रदाता = request.POST.get ('प्रदाता', '*')) order_items = OrderItem.objects.filter (प्रदाता = प्रदाता)   

क्या मैं एक डीजेंजो में उपयोग कर सकते हैं वाइल्डकार्ड, ऐसा कोई प्रदाता अगर पोस्ट अनुरोध, यह उसके लिए सभी वस्तुओं को वापस करेगा?

दूसरे शब्दों में, क्या यह पूरा करने का एक तरीका है?

  अगर अनुरोध .POST.get ('प्रदाता'): order_items = OrderItem.objects.filter (प्रदाता = प्रदाता) अन्य: order_items = OrderItem.objects.all ()    

कोई प्रत्यक्ष वाइल्डकार्ड पैरामीटर नहीं है, इसलिए आपके पास पूरी तरह स्वीकार्य है। कोड पठनीयता भी गिना जाता है, भले ही आप अधिक कोड के साथ समाप्त हो जाएं, हो सकता है कि यह अधिक संतोषजनक हो।

आप इस तरह की खोज की श्रृंखला को चेन कर सकते हैं:

  प्रदाता = अनुरोध .POST.get ('प्रदाता') order_items = OrderItem.objects.all () यदि प्रदाता कोई नहीं है: order_items = order_items.filter (प्रदाता = प्रदाता)   

या आप सेट कर सकते हैं kwargs के लिए फ़िल्टर () इस तरह कॉल करें, लेकिन यह मेरी राय में कम पठनीय है:

  प्रदाता = अनुरोध POST.get ('प्रदाता') kwargs = {} अगर प्रदाता कोई नहीं है: kwargs ['प्रदाता'] = प्रदाता के order_items = OrderItem.objects.filter (** kwargs)   

यह इस तरह से फ़ंक्शन कॉल में परिवर्तित किया जा सकता है:

  def all_or_filter_args (अनुरोध, आइटम): "" "फिल्टर के लिए तर्कों का शब्दकोश लौटें" यदि आइटम अनुरोध में निर्दिष्ट किया गया है। "" " = Request.get (आइटम) अगर मान नहीं है: रिटर्न {} रिटर्न {मद: value}   

और फिर निम्न एक-लाइनर के लिए उपयोग किया जाता है प्रश्न:

  order_items = OrderItem.objects.filter (** all_or_filter_args (अनुरोध, 'प्रदाता'))   

लेकिन फिर से, मुझे नहीं पता यह आपके द्वारा दिए गए उदाहरण के रूप में पठनीय है।

एक अन्य तरीका लिखना है जो आपको फ़िल्टर करने के लिए अपने स्वयं के कार्यों का उपयोग करने की अनुमति देता है। कस्टम मैनेजर के साथ आप इस तरह से प्रश्नों को अनुमति देने के लिए कोड लागू कर सकते हैं, जहां आप सही फिल्टरिंग लागू करने के लिए all_or_filtered के लिए फ़ंक्शन प्रदान करते हैं:

  order_items = OrderItem.objects All_or_filtered ('प्रदाता', अनुरोध। POST.get ('प्रदाता'))    

No comments:

Post a Comment