Django 2.1 - Lookup API reference
लुकअप एपीआई संदर्भ

लुकअप एपीआई संदर्भ
इस दस्तावेज़ में लुकअप के 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_sqlexpression.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()
के समान ही व्यवहार करता है।
-