Django 2.1 - Lookup API reference

लुकअप एपीआई संदर्भ




django

लुकअप एपीआई संदर्भ

इस दस्तावेज़ में लुकअप के API संदर्भ हैं, डेटाबेस क्वेरी के WHERE क्लॉज के निर्माण के लिए Django API। लुकअप का उपयोग करने का तरीका जानने के लिए, प्रश्न बनाना देखें; नए लुकअप बनाने का तरीका जानने के लिए, कस्टम लुकअप देखें।

लुकअप API में दो घटक होते हैं: एक RegisterLookupMixin वर्ग जो लुकअप को पंजीकृत करता है, और क्वेरी एक्सप्रेशन API , विधियों का एक सेट जिसे क्लास को लुकअप के रूप में फिर से लागू करने के लिए लागू करना होता है।

Django में दो बेस क्लास हैं जो क्वेरी एक्सप्रेशन API का अनुसरण करते हैं और जहाँ से सभी Django बिलियन लुक्स प्राप्त होते हैं:

  • Lookup : किसी फ़ील्ड को देखने के लिए (उदाहरण के लिए field_name__exact का exact )
  • Transform : एक क्षेत्र को बदलने के लिए

एक लुकअप एक्सप्रेशन में तीन भाग होते हैं:

  • फ़ील्ड्स भाग (उदाहरण के लिए Book.objects.filter(author__best_friends__first_name... );
  • ट्रांसफ़ॉर्म भाग (छोड़ा जा सकता है) (जैसे __lower__first3chars__reversed );
  • एक लुकअप (जैसे __icontains ) कि, यदि छोड़ा गया है, तो __exact डिफॉल्ट __exact

पंजीकरण एपीआई

Django खुद को लुकअप RegisterLookupMixin करने के लिए एक वर्ग को इंटरफ़ेस देने के लिए RegisterLookupMixin का उपयोग करता है। दो प्रमुख उदाहरण Field , सभी मॉडल फ़ील्ड का आधार वर्ग, और Aggregate , सभी Django समुच्चय का आधार वर्ग।

class lookups.RegisterLookupMixin

एक मिश्रण जो एक वर्ग पर लुकअप एपीआई को लागू करता है।

classmethod register_lookup(lookup, lookup_name=None)

कक्षा में एक नया लुकअप पंजीकृत करता है। उदाहरण के लिए DateField.register_lookup(YearExact) YearExact पर DateField लुकअप पंजीकृत करेगा। यह एक लुकअप को ओवरराइड करता है जो पहले से ही समान नाम के साथ मौजूद है। lookup_name इस लुकअप के लिए उपयोग किया जाएगा यदि प्रदान किया गया हो, अन्यथा lookup.lookup_name का उपयोग किया जाएगा।

get_lookup(lookup_name)

वर्ग में पंजीकृत lookup_name नामक Lookup लौटाता है। डिफ़ॉल्ट क्रियान्वयन सभी मूल वर्गों पर पुनरावर्ती दिखता है और जाँचता है कि पहले मैच को लौटाते समय किसी भी व्यक्ति का lookup_name नामक पंजीकृत लुकअप है।

get_lookups()

क्लास में मैप किए गए प्रत्येक लुकअप नाम की एक डिक्शनरी लुकअप क्लास में मैप की जाती है।

get_transform(transform_name)

एक Transform नाम transform_name । डिफ़ॉल्ट कार्यान्वयन सभी माता-पिता वर्गों पर पुनरावर्ती रूप से देखता है कि पहले मैच को लौटाने वाले किसी भी ट्रांसफॉर्म नाम का transform_name दर्ज किया गया है या नहीं।

एक वर्ग के लिए एक लुकअप होना चाहिए, यह क्वेरी एक्सप्रेशन एपीआई का पालन करना चाहिए। Lookup और Transform स्वाभाविक रूप से इस एपीआई का अनुसरण करते हैं।

क्वेरी अभिव्यक्ति एपीआई

क्वेरी एक्सप्रेशन API तरीकों का एक सामान्य सेट है, जो कक्षाएं SQL अभिव्यक्तियों में खुद को अनुवाद करने के लिए क्वेरी एक्सप्रेशंस में प्रयोग करने योग्य होती हैं। प्रत्यक्ष क्षेत्र संदर्भ, समुच्चय और Transform इस एपीआई का अनुसरण करने वाले उदाहरण हैं। एक वर्ग क्वेरी अभिव्यक्ति एपीआई का पालन करने के लिए कहा जाता है जब वह निम्नलिखित विधियों को लागू करता है:

as_sql(compiler, connection)

अभिव्यक्ति के लिए क्वेरी स्ट्रिंग और मापदंडों के उत्पादन के लिए जिम्मेदार है। compiler एक SQLCompiler ऑब्जेक्ट है, जिसमें एक compile() विधि है जिसका उपयोग अन्य अभिव्यक्तियों को संकलित करने के लिए किया जा सकता है। connection क्वेरी को निष्पादित करने के लिए उपयोग किया जाने वाला connection है।

कॉलिंग expression.as_sql() .as_sql expression.as_sql() आमतौर पर गलत है - इसके बजाय compiler.compile(expression) का उपयोग किया जाना चाहिए। compiler.compile() पद्धति विक्रेता-विशिष्ट अभिव्यक्ति के तरीकों को कॉल करने का ध्यान रखेगी।

कस्टम कीवर्ड के तर्कों को इस पद्धति पर परिभाषित किया जा सकता है यदि यह संभावना है कि as_vendorname() विधियों या उपवर्गों को SQL स्ट्रिंग की पीढ़ी को ओवरराइड करने के लिए डेटा की आपूर्ति करने की आवश्यकता होगी। उदाहरण के उपयोग के लिए Func.as_sql() देखें।

as_vendorname(compiler, connection)

as_sql() विधि की तरह काम करता है। जब एक compiler.compile() द्वारा संकलित किया जाता है, तो Django पहले as_vendorname() को कॉल करने का प्रयास करेगा, जहां vendorname क्वेरी को निष्पादित करने के लिए उपयोग किए जाने वाले बैकेंड का विक्रेता नाम है। vendorname एक postgresql , oracle , vendorname , या vendorname ऑफ vendorname इन vendorname से एक है।

get_lookup(lookup_name)

lookup_name नामक लुकअप अवश्य lookup_name । उदाहरण के लिए, self.output_field.get_lookup(lookup_name)

get_transform(transform_name)

transform_name नामक लुकअप अवश्य लौटाएं। उदाहरण के लिए, self.output_field.get_transform(transform_name) वापस self.output_field.get_transform(transform_name)

output_field

get_lookup() विधि द्वारा लौटाए गए वर्ग के प्रकार को परिभाषित करता है। यह एक Field उदाहरण होना चाहिए।

Transform संदर्भ

class Transform [source]

Transform एक क्षेत्र परिवर्तन को लागू करने के लिए एक सामान्य वर्ग है। एक प्रमुख उदाहरण __year जो एक DateField को DateField में बदल IntegerField

लुकअप अभिव्यक्ति में एक Transform का उपयोग करने के लिए नोटेशन है <expression>__<transformation> (जैसे date__year )।

यह वर्ग क्वेरी एक्सप्रेशन एपीआई का अनुसरण करता है , जिसका अर्थ है कि आप <expression>__<transform1>__<transform2> उपयोग कर सकते हैं। यह एक विशेष फ़ंक () अभिव्यक्ति है जो केवल एक तर्क को स्वीकार करता है। यह एक फिल्टर के दाहिने हाथ की ओर या सीधे एनोटेशन के रूप में भी इस्तेमाल किया जा सकता है।

bilateral

एक बूलियन यह दर्शाता है कि क्या यह परिवर्तन दोनों lhs और rhs लागू होना चाहिए। द्विपक्षीय रूपांतर उसी क्रम में rhs लागू होंगे जैसे वे लुकअप अभिव्यक्ति में दिखाई देते हैं। डिफ़ॉल्ट रूप से यह False सेट होता है। उदाहरण के उपयोग के लिए, कस्टम लुकअप देखें।

lhs

बायीं ओर - क्या तब्दील हो रहा है। यह क्वेरी एक्सप्रेशन API का पालन करना चाहिए।

lookup_name

लुकअप का नाम, जिसका उपयोग पार्सिंग क्वेरी अभिव्यक्तियों पर पहचान करने के लिए किया जाता है। इसमें स्ट्रिंग "__" नहीं हो सकता है।

output_field

इस रूपांतरण आउटपुट को वर्ग परिभाषित करता है। यह एक Field उदाहरण होना चाहिए। डिफ़ॉल्ट रूप से इसके lhs.output_field के समान है।

Lookup संदर्भ

class Lookup [source]

Lookup को लागू करने के लिए एक Lookup एक सामान्य वर्ग है। एक लुकअप एक बाएं हाथ की ओर के साथ एक क्वेरी अभिव्यक्ति है, lhs ; एक दाहिने हाथ की ओर, rhs ; और एक lookup_name जो कि lhs और rhs जैसे lhs in rhs या lhs > rhs बीच बूलियन तुलना उत्पन्न करने के लिए उपयोग किया जाता है।

किसी व्यंजक में लुकअप का उपयोग करने की सूचना <lhs>__<lookup_name>=<rhs>

यह वर्ग क्वेरी एक्सप्रेशन API का अनुसरण नहीं करता है क्योंकि इसके निर्माण पर =<rhs> : लुकअप हमेशा लुकअप एक्सप्रेशन का अंत होता है।

lhs

बाईं ओर - क्या देखा जा रहा है। ऑब्जेक्ट को क्वेरी एक्सप्रेशन API का पालन करना चाहिए।

rhs

दाएं हाथ की ओर - किस lhs की तुलना की जा रही है। यह एक सादा मूल्य, या ऐसा कुछ हो सकता है जो SQL में संकलित होता है, आमतौर पर एक F() ऑब्जेक्ट या एक QuerySet

lookup_name

इस खोज का नाम, इसका उपयोग पार्सिंग क्वेरी अभिव्यक्तियों पर पहचान करने के लिए किया जाता है। इसमें स्ट्रिंग "__" नहीं हो सकता है।

process_lhs(compiler, connection, lhs=None) [source]

जैसा कि compiler.compile(lhs) द्वारा लौटाया गया है, एक tuple (lhs_string, lhs_params) compiler.compile(lhs) । इस विधि को ट्यून करने के लिए ओवरराइड किया जा सकता है कि lhs कैसे संसाधित होता है।

compiler एक SQLCompiler वस्तु है, जिसका उपयोग compiler.compile(lhs) तरह किया जाता है। connection का उपयोग विक्रेता विशिष्ट SQL संकलित करने के लिए किया जा सकता है। यदि lhs कोई None , तो इसे lhs बजाय संसाधित lhs रूप में उपयोग करें।

process_rhs(compiler, connection) [source]

दाईं ओर के लिए process_lhs() के समान ही व्यवहार करता है।