Django 2.1 - Model Meta options

मॉडल मेटा विकल्प




django

मॉडल मेटा विकल्प

यह दस्तावेज़ उन सभी संभावित मेटाडेटा विकल्पों की व्याख्या करता है जो आप अपने मॉडल को उसके आंतरिक class Meta में दे सकते हैं।

उपलब्ध Meta विकल्प

abstract

Options.abstract

यदि abstract = True , तो यह मॉडल एक सार आधार वर्ग होगा

app_label

Options.app_label

यदि कोई मॉडल INSTALLED_APPS में किसी एप्लिकेशन के बाहर परिभाषित INSTALLED_APPS , तो उसे यह घोषित करना होगा कि वह किस ऐप का है:

app_label = 'myapp'

यदि आप किसी मॉडल को app_label.object_name या app_label.model_name साथ प्रदर्शित करना चाहते हैं, तो आप क्रमशः model._meta.label या model._meta.label_lower उपयोग कर सकते हैं।

base_manager_name

Options.base_manager_name

मॉडल के _base_manager लिए उपयोग करने के लिए प्रबंधक का नाम।

db_table

Options.db_table

मॉडल के लिए उपयोग करने के लिए डेटाबेस तालिका का नाम:

db_table = 'music_album'

टेबल के नाम

आपको समय बचाने के लिए, Django स्वचालित रूप से डेटाबेस तालिका का नाम आपके मॉडल वर्ग और उस ऐप के नाम से प्राप्त करता है जिसमें यह शामिल है। एक मॉडल का डेटाबेस टेबल नाम मॉडल के "ऐप लेबल" से जुड़कर बनाया गया है - आपने जो नाम प्रबंधन में इस्तेमाल किया है, वह है - मॉडल के वर्ग के नाम पर, उनके बीच एक अंडरस्कोर के साथ।

उदाहरण के लिए, यदि आपके पास एक ऐप bookstore (जैसा कि प्रबंधन manage.py startapp bookstore द्वारा बनाया गया है), एक मॉडल जिसे class Book रूप में परिभाषित किया गया है, उसके पास bookstore_book नामक एक डेटाबेस तालिका होगी।

डेटाबेस तालिका नाम को ओवरराइड करने के लिए, class Meta में db_table पैरामीटर का उपयोग करें।

यदि आपके डेटाबेस की तालिका का नाम एक एसक्यूएल आरक्षित शब्द है, या इसमें ऐसे वर्ण शामिल हैं जिन्हें पायथन चर नामों में अनुमति नहीं है - विशेष रूप से, हाइफ़न - यह ठीक है। Django पर्दे के पीछे कॉलम और टेबल नामों को उद्धृत करता है।

MySQL के लिए लोअरकेस टेबल नामों का उपयोग करें

यह दृढ़ता से सलाह दी जाती है कि जब आप तालिका का नाम db_table माध्यम से ओवरराइड करते हैं, तो आप लोअरकेस तालिका नामों का उपयोग करते हैं, खासकर यदि आप MySQL बैकएंड का उपयोग कर रहे हैं। अधिक जानकारी के लिए MySQL नोट देखें।

Oracle के लिए तालिका का नाम

30-चार सीमा को पूरा करने के लिए ओरेकल में टेबल के नाम हैं, और ओरेकल डेटाबेस के लिए सामान्य सम्मेलनों से मेल खाते हैं, Django टेबल के नामों को छोटा कर सकता है और उन्हें सभी अपरकेस में बदल सकता है। ऐसे परिवर्तनों को रोकने के लिए, db_table के मान के रूप में एक उद्धृत नाम का उपयोग करें:

db_table = '"name_left_in_lowercase"'

ऐसे उद्धृत नामों का उपयोग Django के अन्य समर्थित डेटाबेस बैकएंड के साथ भी किया जा सकता है; ओरेकल को छोड़कर, हालांकि, उद्धरणों का कोई प्रभाव नहीं है। अधिक जानकारी के लिए Oracle नोट्स देखें।

db_tablespace

Options.db_tablespace

इस मॉडल के लिए उपयोग करने के लिए डेटाबेस टेबलस्पेस का नाम। यदि सेट है तो डिफ़ॉल्ट प्रोजेक्ट की DEFAULT_TABLESPACE सेटिंग है। यदि बैकएंड टेबलस्पेस का समर्थन नहीं करता है, तो इस विकल्प को अनदेखा कर दिया जाता है।

default_manager_name

Options.default_manager_name

मॉडल के _default_manager लिए उपयोग करने के लिए प्रबंधक का नाम।

get_latest_by

Options.get_latest_by

किसी फ़ील्ड का नाम या मॉडल में फ़ील्ड नामों की सूची, आमतौर पर DateField , DateTimeField या IntegerField । यह आपके मॉडल Manager के latest() और earliest() तरीकों का उपयोग करने के लिए डिफ़ॉल्ट फ़ील्ड (एस) को निर्दिष्ट करता है।

उदाहरण:

# Latest by ascending order_date.
get_latest_by = "order_date"

# Latest by priority descending, order_date ascending.
get_latest_by = ['-priority', 'order_date']

अधिक के लिए latest() डॉक्स देखें।

Django 2.0 में बदला:

खेतों की एक सूची के लिए समर्थन जोड़ा गया था।

managed

Options.managed

True , Defaults का मतलब Django, migrate या माइग्रेशन के हिस्से के रूप में उपयुक्त डेटाबेस टेबल बनाएगा और उन्हें flush मैनेजमेंट कमांड के हिस्से के रूप में हटा देगा। यही है, Django डेटाबेस तालिकाओं के जीवन चक्र का प्रबंधन करता है।

यदि False , तो इस मॉडल के लिए कोई डेटाबेस तालिका निर्माण या विलोपन कार्य नहीं किया जाएगा। यह उपयोगी है यदि मॉडल किसी मौजूदा तालिका या डेटाबेस दृश्य का प्रतिनिधित्व करता है जिसे किसी अन्य माध्यम से बनाया गया है। यह एकमात्र अंतर है जब managed=False । मॉडल हैंडलिंग के अन्य सभी पहलू सामान्य रूप से बिल्कुल समान हैं। यह भी शामिल है

  1. यदि आप इसे घोषित नहीं करते हैं तो मॉडल में एक स्वचालित प्राथमिक कुंजी फ़ील्ड जोड़ना। बाद के कोड पाठकों के लिए भ्रम से बचने के लिए, यह अप्रबंधित मॉडल का उपयोग करते समय आपके द्वारा मॉडलिंग की जा रही डेटाबेस तालिका से सभी कॉलम निर्दिष्ट करने की अनुशंसा की जाती है।
  2. यदि managed=False मॉडल में एक ManyToManyField होता है जो किसी अन्य अप्रबंधित मॉडल की ओर ManyToManyField है, तो कई-से-कई सम्मिलित होने के लिए मध्यवर्ती तालिका भी नहीं बनाई जाएगी। हालांकि, एक प्रबंधित और एक अप्रबंधित मॉडल के बीच मध्यस्थ तालिका बनाई जाएगी

    यदि आपको इस डिफ़ॉल्ट व्यवहार को बदलने की आवश्यकता है, तो एक स्पष्ट मॉडल के रूप में मध्यस्थ तालिका बनाएं (आवश्यक रूप से managed सेट के साथ) और संबंधित कस्टम मॉडल का उपयोग करने के लिए ManyToManyField.through विशेषता का उपयोग करें।

managed=False साथ मॉडल वाले परीक्षणों के लिए, यह सुनिश्चित करना आपके लिए सही है कि परीक्षण सेटअप के भाग के रूप में सही तालिकाओं का निर्माण किया गया है।

यदि आप एक मॉडल वर्ग के पायथन-स्तरीय व्यवहार को बदलने में रुचि रखते हैं, तो आप managed=False उपयोग कर सकते हैं और मौजूदा मॉडल की एक प्रति बना सकते हैं। हालाँकि, उस स्थिति के लिए एक बेहतर तरीका है: प्रॉक्सी मॉडल

order_with_respect_to

Options.order_with_respect_to

इस ऑब्जेक्ट को दिए गए क्षेत्र के संबंध में क्रमबद्ध बनाता है, आमतौर पर एक ForeignKey । इसका उपयोग संबंधित वस्तुओं को मूल वस्तु के संबंध में क्रमबद्ध बनाने के लिए किया जा सकता है। उदाहरण के लिए, यदि कोई Answer Question ऑब्जेक्ट से संबंधित है, और एक प्रश्न में एक से अधिक उत्तर हैं, और उत्तर का क्रम मायने रखता है, तो आप ऐसा करेंगे:

from django.db import models

class Question(models.Model):
    text = models.TextField()
    # ...

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    # ...

    class Meta:
        order_with_respect_to = 'question'

जब order_with_respect_to सेट किया जाता है, तो संबंधित ऑब्जेक्ट्स के ऑर्डर को पुनः प्राप्त करने और सेट करने के लिए दो अतिरिक्त विधियाँ प्रदान की जाती हैं: get_RELATED_order() और set_RELATED_order() , जहाँ set_RELATED_order() मॉडल का set_RELATED_order() नाम है। उदाहरण के लिए, यह मानते हुए कि एक Question ऑब्जेक्ट में कई संबंधित Answer ऑब्जेक्ट हैं, लौटी सूची में संबंधित Answer ऑब्जेक्ट्स की प्राथमिक कुंजी होती है:

>>> question = Question.objects.get(id=1)
>>> question.get_answer_order()
[1, 2, 3]

Question ऑब्जेक्ट की संबंधित Answer वस्तुओं का क्रम Answer प्राथमिक कुंजी की सूची में पास करके निर्धारित किया जा सकता है:

>>> question.set_answer_order([3, 1, 2])

संबंधित वस्तुओं को दो तरीके भी मिलते हैं, get_next_in_order() और get_previous_in_order() , जो उन वस्तुओं को उनके उचित क्रम में उपयोग करने के लिए उपयोग किया जा सकता है। Answer वस्तुओं को id द्वारा दिए गए हैं:

>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order()
<Answer: 3>
>>> answer.get_previous_in_order()
<Answer: 1>

order_with_respect_to रूप से ordering करने का विकल्प सेट करता है

आंतरिक रूप से, order_with_respect_to नाम का एक अतिरिक्त फ़ील्ड / डेटाबेस कॉलम _order और इस क्षेत्र के लिए मॉडल का ordering विकल्प सेट करता है। नतीजतन, order_with_respect_to और ordering एक साथ उपयोग नहीं किया जा सकता है, और जब भी आप इस मॉडल की वस्तुओं की सूची प्राप्त करते हैं, तब order_with_respect_to द्वारा जोड़ा गया आदेश लागू होगा।

order_with_respect_to बदल order_with_respect_to

क्योंकि order_with_respect_to एक नया डेटाबेस कॉलम जोड़ता है, यदि आप अपने प्रारंभिक migrate बाद order_with_respect_to जोड़ते हैं या बदलते हैं तो उचित माइग्रेशन बनाना और लागू करना सुनिश्चित करें।

ordering

Options.ordering

ऑब्जेक्ट के लिए डिफ़ॉल्ट ऑर्डर, वस्तुओं की सूची प्राप्त करते समय उपयोग के लिए:

ordering = ['-order_date']

यह एक ट्यूल या स्ट्रिंग्स और / या क्वेरी एक्सप्रेशंस की सूची है। प्रत्येक स्ट्रिंग एक वैकल्पिक "-" उपसर्ग के साथ एक फ़ील्ड नाम है, जो अवरोही क्रम को इंगित करता है। एक अग्रणी "-" के बिना फ़ील्ड्स को आरोही करने का आदेश दिया जाएगा। बेतरतीब ढंग से ऑर्डर करने के लिए स्ट्रिंग "?" का उपयोग करें।

उदाहरण के लिए, एक pub_date क्षेत्र के आरोही क्रम से, इसका उपयोग करें:

ordering = ['pub_date']

उतरते हुए pub_date द्वारा ऑर्डर करने के लिए, इसका उपयोग करें:

ordering = ['-pub_date']

उतरते हुए pub_date द्वारा ऑर्डर करने के लिए, फिर author आरोही द्वारा, इसका उपयोग करें:

ordering = ['-pub_date', 'author']

आप क्वेरी अभिव्यक्तियों का भी उपयोग कर सकते हैं। author द्वारा आरोही करने और शून्य मानों को क्रमबद्ध बनाने के लिए, इसका उपयोग करें:

from django.db.models import F

ordering = [F('author').asc(nulls_last=True)]

डिफ़ॉल्ट आदेश भी एकत्रीकरण प्रश्नों को प्रभावित करता है।

Django 2.0 में बदला:

क्वेरी अभिव्यक्तियों के लिए समर्थन जोड़ा गया था।

चेतावनी

ऑर्डर देना एक मुफ्त ऑपरेशन नहीं है। प्रत्येक क्षेत्र जिसे आप ऑर्डर करने के लिए जोड़ते हैं, आपके डेटाबेस में खर्च होता है। आपके द्वारा जोड़े गए प्रत्येक विदेशी कुंजी में निहित सभी डिफ़ॉल्ट आदेश भी शामिल होंगे।

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

permissions

Options.permissions

इस ऑब्जेक्ट को बनाते समय अनुमतियों की तालिका में प्रवेश करने के लिए अतिरिक्त अनुमतियाँ। प्रत्येक मॉडल के लिए जोड़ें, बदलें, हटाएं और अनुमतियाँ स्वचालित रूप से बनाई गई हैं। यह उदाहरण एक अतिरिक्त अनुमति, can_deliver_pizzas निर्दिष्ट करता है:

permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)

यह प्रारूप (permission_code, human_readable_permission_name) में 2-ट्यूपल्स की एक सूची या ट्यूपल है।

default_permissions

Options.default_permissions

डिफॉल्ट ('add', 'change', 'delete', 'view') । आप इस सूची को अनुकूलित कर सकते हैं, उदाहरण के लिए, इसे खाली सूची में सेट करके अगर आपके ऐप को किसी भी डिफ़ॉल्ट अनुमति की आवश्यकता नहीं है। किसी भी लोप किए गए अनुमतियों को बनाए जाने से रोकने के लिए इसे मॉडल द्वारा बनाए जाने से पहले मॉडल पर निर्दिष्ट किया जाना चाहिए।

Django 2.1 में परिवर्तित:

view अनुमति जोड़ा गया था।

proxy

Options.proxy

यदि proxy = True , तो एक मॉडल जो किसी अन्य मॉडल को उपवर्गित करता है, उसे प्रॉक्सी मॉडल माना जाएगा।

required_db_features

Options.required_db_features

डेटाबेस सुविधाओं की सूची जिसमें वर्तमान कनेक्शन होना चाहिए ताकि मॉडल को प्रवास चरण के दौरान माना जाए। उदाहरण के लिए, यदि आप इस सूची को ['gis_enabled'] सेट करते हैं, तो मॉडल केवल ['gis_enabled'] सक्षम डेटाबेस पर सिंक्रनाइज़ हो जाएगा। कई डेटाबेस बैकएंड के साथ परीक्षण करते समय कुछ मॉडल को छोड़ना भी उपयोगी है। उन मॉडलों के बीच संबंधों से बचें जो ORM के रूप में बनाए जा सकते हैं या नहीं बनाए जा सकते हैं।

required_db_vendor

Options.required_db_vendor

एक समर्थित डेटाबेस विक्रेता का नाम जो यह मॉडल विशिष्ट है। वर्तमान में निर्मित विक्रेता के नाम हैं: sqlite , postgresql , mysql , oracle । यदि यह विशेषता खाली नहीं है और वर्तमान कनेक्शन विक्रेता इससे मेल नहीं खाता है, तो मॉडल सिंक्रनाइज़ नहीं किया जाएगा।

select_on_save

Options.select_on_save

यह निर्धारित करता है कि क्या Django पूर्व 1.6 django.db.models.Model.save() एल्गोरिथ्म का उपयोग करेगा। पुराने एल्गोरिथ्म यह निर्धारित करने के लिए SELECT का उपयोग करता है कि क्या मौजूदा पंक्ति को अद्यतन किया जाना है। नया एल्गोरिदम सीधे एक UPDATE कोशिश करता है। कुछ दुर्लभ मामलों में मौजूदा पंक्ति का UPDATE Django के लिए दिखाई नहीं देता है। एक उदाहरण ON UPDATE ट्रिगर ON UPDATE PostgreSQL है जो NULL लौटाता NULL । ऐसे मामलों में नया एल्गोरिथ्म डेटाबेस में एक पंक्ति मौजूद होने पर भी INSERT करना समाप्त कर देगा।

आमतौर पर इस विशेषता को निर्धारित करने की आवश्यकता नहीं होती है। डिफ़ॉल्ट False

पुराने और नए बचत एल्गोरिथ्म के बारे में अधिक जानने के लिए django.db.models.Model.save() देखें।

indexes

Options.indexes

उन indexes सूची जिन्हें आप मॉडल पर परिभाषित करना चाहते हैं:

from django.db import models

class Customer(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    class Meta:
        indexes = [
            models.Index(fields=['last_name', 'first_name']),
            models.Index(fields=['first_name'], name='first_name_idx'),
        ]

unique_together

Options.unique_together

फ़ील्ड नामों के समूह, जिन्हें एक साथ लिया गया है, अद्वितीय होने चाहिए:

unique_together = (("driver", "restaurant"),)

यह एक प्रकार का पौधा है जिसे एक साथ विचार करने पर अद्वितीय होना चाहिए। इसका उपयोग Django के व्यवस्थापक में किया जाता है और इसे डेटाबेस स्तर पर लागू किया जाता है (यानी, उपयुक्त सामान्य विवरण CREATE TABLE स्टेटमेंट में शामिल किए जाते हैं)।

सुविधा के लिए, फ़ील्ड के एक सेट के साथ काम करते समय, यूनिकली पूरी तरह से एकल एकल हो सकता है:

unique_together = ("driver", "restaurant")

एक ManyToManyField को अद्वितीय रूप से शामिल नहीं किया जा सकता है। (यह स्पष्ट नहीं है कि इसका क्या अर्थ होगा!) यदि आपको एक ManyToManyField से संबंधित विशिष्टता को मान्य करने की आवश्यकता है, तो संकेत या मॉडल के ManyToManyField.through एक स्पष्ट का उपयोग करने का प्रयास करें।

अवरोध का उल्लंघन मॉडल सत्यापन के दौरान उठाया जाता है जब बाधा का उल्लंघन किया जाता है, unique_together त्रुटि कोड होता है।

index_together

Options.index_together

इसके बजाय indexes विकल्प का उपयोग करें।

नए indexes विकल्प index_together से अधिक कार्यक्षमता प्रदान करता है। index_together को भविष्य में पदावनत किया जा सकता है।

फ़ील्ड नामों के समूह, जिन्हें एक साथ लिया गया है, अनुक्रमित हैं:

index_together = [
    ["pub_date", "deadline"],
]

फ़ील्ड की इस सूची को एक साथ अनुक्रमित किया जाएगा (यानी उपयुक्त CREATE INDEX स्टेटमेंट जारी किया जाएगा।)

सुविधा के लिए, index_together पूरी तरह से एक एकल सूची हो सकती है जब खेतों के एक सेट के साथ काम करना:

index_together = ["pub_date", "deadline"]

verbose_name

Options.verbose_name

ऑब्जेक्ट के लिए एक मानव-पठनीय नाम, एकवचन:

verbose_name = "pizza"

यदि यह नहीं दिया जाता है, तो Django वर्ग नाम के एक मुंग वाले संस्करण का उपयोग करेगा: CamelCase camel case बन जाता camel case

verbose_name_plural

Options.verbose_name_plural

वस्तु का बहुवचन नाम:

verbose_name_plural = "stories"

यदि यह नहीं दिया जाता है, तो Django verbose_name + "s" उपयोग करेगा।

Meta केवल Meta विशेषताएँ

label

Options.label

ऑब्जेक्ट का प्रतिनिधित्व, app_label.object_name देता है, उदाहरण के लिए 'polls.Question'

label_lower

Options.label_lower

मॉडल का प्रतिनिधित्व, app_label.model_name , उदाहरण के लिए 'polls.question'