विषय पर बढ़ें

मूल डेटा स्रोत पर लौटें

निम्नलिखित विधियां आपको एक क्वेरी निष्पादित करने की अनुमति देती हैं, लेकिन एक ormar नमूना वापस करने के बजाय, एक शब्दकोश या ट्यूपल्स की सूची लौटाएं।

  • values(fields = None, exclude_through = False) -> List[Dict]

  • values_list(fields = None, exclude_through = False, flatten = False) -> List

  • क्वेरी सेट एजेंट

    • QuerysetProxy.values(fields = None, exclude_through = False) विधि
    • QuerysetProxy.values_list(fields = None, exclude_through= False, flatten = False) विधि

!!!कृपया ध्यान दें कि मान और मान \ _ सूची परिणामों को एक ormar नमूना पर पार्स करना छोड़ दें, और इसलिए परिणामों के सत्यापन को छोड़ दें!

!!!चेतावनी, कृपया ध्यान दें कि परिणाम सूची में प्रत्येक प्रविष्टि क्वेरी परिणाम पंक्ति का एक-से-एक प्रतिबिंब है। चूंकि पंक्तियों को पार्स नहीं किया जाता है यदि आपके पास एक-से-कई या कई-से-कई संबंध हैं, तो डुप्लिकेट कॉलम मान परिणाम प्रविष्टियों में दिखाई देते हैं यदि एक मूल पंक्ति में कई संबंधित पंक्तियाँ हैं।

मान

values(fields: Union[List, str, Set, Dict] = None, exclude_through: bool = False) -> List[Dict]

डेटाबेस से स्तंभों का प्रतिनिधित्व करने वाले मानों की एक शब्दकोश सूची लौटाता है।

आप फ़ील्ड के सबसेट का चयन करने के लिए फ़ील्ड पैरामीटर का उपयोग कर सकते हैं जो फ़ील्ड () विधि के समान मापदंडों के सेट को स्वीकार करता है।

कृपया ध्यान दें कि मान (fields) के लिए एक फ़ील्ड पास करना वास्तव में फ़ील्ड को कॉल करने का शॉर्टकट है (fields).values ().

!!!इस बारे में अधिक जानने के लिए कि आप फ़ील्ड में क्या पास कर सकते हैं और नेस्टेड नमूना फ़ील्ड कैसे चुन सकते हैं, कॉलम का चयन करें प्रलेखन पढ़ें

आप फ़िल्टर में शर्तें प्रदान करके पंक्तियों की संख्या को सीमित कर सकते हैं () and except (), लेकिन ध्यान रखें कि भले ही केवल एक पंक्ति (or no row!) mअपने मानदंडों को पूरा करता है, आप प्रतिक्रिया में एक सूची लौटाएंगे।

उदाहरण:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# घोषित मॉडल

कक्षा श्रेणी (ormar. Model):
    ormar_config = base_ormar_config (टेबलनाम = "श्रेणियाँ")

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 40)
    सॉर्ट _ ऑर्डर: int = ormar। पूर्णांक (nullable = True)


क्लास पोस्ट (ormar. Model):
    ormar _ config = आधार _ ormar _ config कॉपी ()

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 200)
    श्रेणी: वैकल्पिक [श्रेणी] = ormar। विदेशी कुंजी (श्रेणी)

# नमूना डेटा
समाचार = प्रतीक्षा श्रेणी (name = "News", sort_order = 0).save ()
प्रतीक्षारत पोस्ट (name = "Ormar फिर से हमला करता है!", श्रेणी = समाचार)। ()
प्रतीक्षारत पोस्ट (name = "आप अभी तक ormar का उपयोग क्यों नहीं करते ?", श्रेणी = समाचार)। ()
प्रतीक्षा पोस्ट (नाम = "यह बाहर की जाँच करें, अब मुफ्त में ormar", श्रेणी = समाचार)। ()

डाक नमूना पहुंचें:

1
2
3
4
5
6
पोस्ट = प्रतीक्षा करें
आरोपित पद == [
    {"id": 1, "name": "Ormar strikes again!", "category": 1},
    {"id": 2, "name": "Why don't you use ormar yet?", "category": 1},
    {"id": 3, "name": "Check this out, ormar now for free", "category": 1},
]

एक ही समय में संबंधित मॉडल का चयन करने के लिए, \ _ lated या pre\ _ lated का चयन करें।

ध्यान दें कि नेस्टेड नमूना कॉलम स्वायत्त नमूना के पूर्ण संबंधपरक पथ के साथ कैसे उपसर्ग किए जाते हैं नमूना (क्वेरी में उपयोग किया जाता है)।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# मॉडल घोषित करें

कक्षा उपयोगकर्ता (ormar. Model):
    ormar _ config = आधार _ ormar _ config कॉपी ()

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 100)


कक्षा की भूमिका (ormar. Model):
    ormar _ config = आधार _ ormar _ config कॉपी ()

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 100)
    उपयोगकर्ता: सूची [उपयोगकर्ता] = ormar। MTo(उपयोगकर्ता)

# नमूना डेटा
निर्माता = प्रतीक्षा उपयोगकर्ता (name = "बेनामी") .()
व्यवस्थापक = भूमिका का इंतजार करें (name = "admin").सहेजें ()
संपादक = भूमिका का इंतजार करें (name = "editor").सहेजें ()
Acreator.add (admin)
Acreator.add (संपादक)

भूमिकाओं वाले उपयोगकर्ताओं का चयन करें

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
उपयोगकर्ता = User.select_related का इंतजार करें ("roles").values ()
# नोट नेस्टेड उपसर्ग: रोलर्स और भूमिकाएं
उपयोगकर्ता = = [
    {
        "आईडी": 1,
        "नाम": "बेनामी",
        "रोल्यूसर__ आईडी": 1,
        "रोल्यूसर__ भूमिका": 1,
        "रोल्यूसर__यूसर": 1,
        "भूमिकाएँ __ आईडी": 1,
        "भूमिकाएँ __ नाम": "व्यवस्थापक",
    },
    {
        "आईडी": 1,
        "नाम": "बेनामी",
        "रोल्यूसर__ आईडी": 2,
        "रोल्यूसर__ भूमिका": 2,
        "रोल्यूसर__यूसर": 1,
        "भूमिकाएँ __ आईडी": 2,
        "भूमिकाएँ __ नाम": "संपादक",
    },
]

!!!ध्यान दें कि भूमिकाओं और उपयोगकर्ताओं के बीच संबंध कई-से-कई है, इसलिए आप डिफ़ॉल्ट रूप से नमूना कॉलम भी प्राप्त कर सकते हैं।

केवल 3 फ़ील्ड का चयन करने के लिए संबंधित फ़ील्ड और फ़ील्ड को मिलाएं।

कृपया ध्यान दें कि हमने नमूना द्वारा परिभाषा को भी बाहर रखा है, क्योंकि परिभाषा के अनुसार, जॉइन में निहित प्रत्येक नमूना लेकिन खेतों में किसी भी संदर्भ के बिना पूरी तरह से चयनित माना जाता है (including all fields).

!!!ध्यान दें कि अन्य क्वेरीसेट दृष्टिकोणों के विपरीत, आप मध्यवर्ती नमूना को बाहर कर सकते हैं, लेकिन अनुगामी स्तंभों को रख सकते हैं, जो मूल डेटा स्रोत को नमूना में पार्स करते समय कोई मतलब नहीं है।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
तो संबंध श्रेणी में -> श्रेणी _ x _ पोस्ट -> पोस्ट -> उपयोगकर्ता जिसे आप बाहर कर सकते हैं
श्रेणी _ x _ पोस्ट और पोस्ट मॉडल लेकिन उपयोगकर्ता को एक रख सकते हैं।
संदर्भ जो संभव नहीं है जैसे कि आप मॉडल के माध्यम से बाहर करेंगे और पोस्ट करेंगे
श्रेणी मॉडल से उपयोगकर्ता मॉडल तक पहुंचने का कोई तरीका नहीं होगा)।


उपयोगकर्ता = (
        प्रतीक्षा करें Role.objects.select_related ("users__categories")
        । फिल्टर (name = "admin")
        । फ़ील्ड ({"नाम": ..., "उपयोगकर्ता": {"नाम": ..., "श्रेणियाँ":{"name"}})
        क्षेत्रों को बाहर करें ("Role User")
        । मान ()
    )
उपयोगकर्ता = = [
    {
        "नाम": "व्यवस्थापक",
        "उपयोगकर्ता __ नाम": "बेनामी",
        "उपयोगकर्ता __ श्रेणियां __ नाम": "समाचार",
    }
]

यदि क्वेरी में कई MToमॉडल हैं, तो आपको प्रत्येक नमूना को मैन्युअल रूप से बाहर करना होगा।

इस बोझ से बचने के लिए, ormar आपको \ _ के माध्यम से = गलत पैरामीटर देता है। यदि यह ध्वज सत्य पर सेट है, तो सभी मॉडल पूरी तरह से बाहर रखे गए हैं।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# ऊपर क्वेरी के समतुल्य, बहिष्कार_फील्ड्स कॉल की कमी पर ध्यान दें
उपयोगकर्ता = (
    प्रतीक्षा करें Role.objects.select_related ("users__categories")
    । फिल्टर (name = "admin")
    । फ़ील्ड ({"नाम": ..., "उपयोगकर्ता": {"नाम": ..., "श्रेणियाँ": {"name"}}})
    । मान (बहिष्कार_थ्रू = सच)
)
उपयोगकर्ता = = [
    {
        "नाम": "व्यवस्थापक",
        "उपयोगकर्ता __ नाम": "बेनामी",
        "उपयोगकर्ता __ श्रेणियां __ नाम": "समाचार",
    }
]

मूल्य सूची

values_list(fields: Union[List, str, Set, Dict] = None, flatten: bool = False, exclude_through: bool = False) -> List

डेटाबेस से स्तंभों के मूल्यों का प्रतिनिधित्व करने वाले ट्यूपल्स की एक सूची लौटाता है।

आप फ़ील्ड के सबसेट का चयन करने के लिए फ़ील्ड पैरामीटर का उपयोग कर सकते हैं जो फ़ील्ड () विधि के समान मापदंडों के सेट को स्वीकार करता है।

ध्यान दें कि मान \ _ सूची (fields) के लिए एक फ़ील्ड पास करना वास्तव में फ़ील्ड (fields) को कॉल करने का शॉर्टकट है। मान \ _ सूची ()।

!!!इस बारे में अधिक जानने के लिए कि आप फ़ील्ड में क्या पास कर सकते हैं और नेस्टेड नमूना फ़ील्ड कैसे चुन सकते हैं, कॉलम का चयन करें प्रलेखन पढ़ें

यदि आप केवल एक स्तंभ / फ़ील्ड का चयन करते हैं, तो आप समतल = सत्य को पारित कर सकते हैं, जो तत्व ट्यूपल्स की सूची के बजाय मानों की एक सूची लौटाएगा।

!!!चेतावनी: समतल सेट करना = यदि एकाधिक (या कोई नहीं, जिसका अर्थ है) फ़ील्ड चयनित हैं, तो अपवाद QueryDefinitionError सही फेंकता है।

आप फ़िल्टर में शर्तें प्रदान करके पंक्तियों की संख्या को सीमित कर सकते हैं () and except (), लेकिन ध्यान रखें कि भले ही केवल एक पंक्ति (or no row!) mअपने मानदंडों को पूरा करता है, आप प्रतिक्रिया में एक सूची लौटाएंगे।

उदाहरण:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# घोषित मॉडल

कक्षा श्रेणी (ormar. Model):
    ormar_config = base_ormar_config (टेबलनाम = "श्रेणियाँ")

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 40)
    सॉर्ट _ ऑर्डर: int = ormar। पूर्णांक (nullable = True)


क्लास पोस्ट (ormar. Model):
    ormar _ config = आधार _ ormar _ config कॉपी ()

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 200)
    श्रेणी: वैकल्पिक [श्रेणी] = ormar। विदेशी कुंजी (श्रेणी)

# नमूना डेटा
समाचार = प्रतीक्षा श्रेणी (name = "News", sort_order = 0).save ()
प्रतीक्षारत पोस्ट (name = "Ormar फिर से हमला करता है!", श्रेणी = समाचार)। ()
प्रतीक्षारत पोस्ट (name = "आप अभी तक ormar का उपयोग क्यों नहीं करते ?", श्रेणी = समाचार)। ()
प्रतीक्षा पोस्ट (नाम = "यह बाहर की जाँच करें, अब मुफ्त में ormar", श्रेणी = समाचार)। ()

डाक नमूना पहुंचें:

1
2
3
4
5
6
7
पोस्ट = प्रतीक्षा करें .objects.values_list ()
# ध्यान दें कि कॉलम आईडी, नाम और श्रेणी (fk) को कैसे संदर्भित करते हैं
आरोपित पद == [
    (1, "ओरमार फिर से हमला करता है!", 1),
    (2, "आप अभी तक ormar का उपयोग क्यों नहीं करते ?", 1),
    (3, "यह बाहर की जाँच करें, अब मुफ्त में ormar", 1),
]

एक ही समय में संबंधित मॉडल का चयन करने के लिए, \ _ lated या pre\ _ lated का चयन करें।

आइए संबंध को जटिल करें और उपयोगकर्ता को संदर्भित करने के लिए पहले उल्लिखित श्रेणी नमूना नमूना को संदर्भित करने के लिए पहले उल्लिखित श्रेणी को संशोधित करें।

1
2
3
4
5
6
7
8
कक्षा श्रेणी (ormar. Model):
    ormar_config = base_ormar_config (टेबलनाम = "श्रेणियाँ")

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 40)
    सॉर्ट _ ऑर्डर: int = ormar। पूर्णांक (nullable = True)
    # नया कॉलम नीचे
    creat_by: वैकल्पिक [उपयोगकर्ता] = ormar। विदेशी (उपयोगकर्ता, संबंधित _ नाम = "श्रेणियां")

अब उपयोगकर्ता लिंक के साथ नमूना डेटा बनाएं।

1
2
3
4
5
6
निर्माता = प्रतीक्षा उपयोगकर्ता (name = "बेनामी") .()
व्यवस्थापक = भूमिका का इंतजार करें (name = "admin").सहेजें ()
संपादक = भूमिका का इंतजार करें (name = "editor").सहेजें ()
Acreator.add (admin)
Acreator.add (संपादक)
समाचार = प्रतीक्षा श्रेणी (नाम = "समाचार", सॉर्ट _ ऑर्डर = 0, बनाया गया _ by = निर्माता)। ()

केवल 3 फ़ील्ड का चयन करने के लिए संबंधित फ़ील्ड और फ़ील्ड को मिलाएं।

कृपया ध्यान दें कि हमने नमूना द्वारा परिभाषा को भी बाहर रखा है, क्योंकि परिभाषा के अनुसार, जॉइन में निहित प्रत्येक नमूना लेकिन खेतों में किसी भी संदर्भ के बिना पूरी तरह से चयनित माना जाता है (including all fields).

!!!ध्यान दें कि अन्य क्वेरीसेट दृष्टिकोणों के विपरीत, आप मध्यवर्ती नमूना को बाहर कर सकते हैं, लेकिन अनुगामी स्तंभों को रख सकते हैं, जो मूल डेटा स्रोत को नमूना में पार्स करते समय कोई मतलब नहीं है।

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
तो संबंध श्रेणी में -> श्रेणी _ x _ पोस्ट -> पोस्ट -> उपयोगकर्ता जिसे आप बाहर कर सकते हैं
श्रेणी _ x _ पोस्ट और पोस्ट मॉडल लेकिन उपयोगकर्ता को एक रख सकते हैं।
संदर्भ जो संभव नहीं है जैसे कि आप मॉडल के माध्यम से बाहर करेंगे और पोस्ट करेंगे
श्रेणी मॉडल से उपयोगकर्ता मॉडल तक पहुंचने का कोई तरीका नहीं होगा)।


उपयोगकर्ता = (
        प्रतीक्षा करें Role.objects.select_related ("users__categories")
        । फिल्टर (name = "admin")
        । फ़ील्ड ({"नाम": ..., "उपयोगकर्ता": {"नाम": ..., "श्रेणियाँ":{"name"}})
        क्षेत्रों को बाहर करें ("Role User")
        । मान _ सूची ()
    )
उपयोगकर्ता = = [("व्यवस्थापक", "बेनामी", "समाचार")]

यदि क्वेरी में कई MToमॉडल हैं, तो आपको प्रत्येक नमूना को मैन्युअल रूप से बाहर करना होगा।

इस बोझ से बचने के लिए, ormar आपको \ _ के माध्यम से = गलत पैरामीटर देता है। यदि यह ध्वज सत्य पर सेट है, तो सभी मॉडल पूरी तरह से बाहर रखे गए हैं।

1
2
3
4
5
6
7
8
# ऊपर क्वेरी के समतुल्य, बहिष्कार_फील्ड्स कॉल की कमी पर ध्यान दें
उपयोगकर्ता = (
        प्रतीक्षा करें Role.objects.select_related ("users__categories")
        । फिल्टर (name = "admin")
        । फ़ील्ड ({"नाम": ..., "उपयोगकर्ता": {"नाम": ..., "श्रेणियाँ":{"name"}})
        मान _ सूची (excout _ through=True)
    )
उपयोगकर्ता = = [("व्यवस्थापक", "बेनामी", "समाचार")]

मानों की सूची प्राप्त करने के लिए समतल का उपयोग करें।

1
2
3
4
5
6
# एक क्षेत्र से अधिक साथ समतल करने से अपवाद बढ़ेंगे!
रोल का इंतजार करें। ({"name", "id"}).values_list (flatten = True)

# उचित उपयोग
भूमिकाएँ = प्रतीक्षा करें ("name"). values_list (flatten = True)
भूमिकाएं = = ["व्यवस्थापक", "संपादक"]

QueryProविधि

प्रासंगिक MToफ़ील्ड और seसीधे एक्सेस करते समय, संबंधित मॉडल की एक सूची वापस आ जाती है।

लेकिन यह क्वेरीसेट एपीआई के एक सबसेट को भी उजागर करता है, इसलिए आप मूल नमूना से सीधे संबंधित मॉडल को फ़िल्टर कर सकते हैं, बना सकते हैं, चुन सकते हैं।

!!!चेतावनी: क्योंकि मान और मान \ _ सूची का उपयोग करके पार्सिंग और सत्यापन नमूना छोड़ देता है, ये दो विधियां वर्तमान में लोड किए गए नमूना को स्पष्ट नहीं करती हैं, और वर्तमान में लोड किए गए नमूना को अपने स्वयं के कॉल परिणामों के साथ अधिलेखित नहीं करती हैं, अन्य सभी पढ़ने के तरीकों की तुलना में ysetproxy!

मान

ऊपर दिए गए मान फ़ंक्शन के समान है, लेकिन आपको संबंध के दूसरे छोर से संबंधित ऑब्जेक्ट को पुनः प्राप्त करने की अनुमति देता है।

!!!QueryProके बारे में अधिक जानने के लिए, QueryProअनुभाग पर जाएं

मूल्य सूची

वास्तव में ऊपर दिए गए मान \ _ सूची फ़ंक्शन के समान है, लेकिन आपको संबंध के दूसरे छोर से संबंधित वस्तुओं को क्वेरी या बनाने की अनुमति देता है।

!!!QueryProके बारे में अधिक जानने के लिए, QueryProअनुभाग पर जाएं