Django 2.1 - Model field reference

मॉडल फ़ील्ड संदर्भ




django

मॉडल फ़ील्ड संदर्भ

इस दस्तावेज़ में फ़ील्ड विकल्प और फ़ील्ड प्रकार Django ऑफ़र सहित Field सभी API संदर्भ शामिल हैं।

यह भी देखें

यदि अंतर्निहित फ़ील्ड चाल नहीं करते हैं, तो आप django-localflavor ( documentation ) की कोशिश कर सकते हैं, जिसमें कोड के मिश्रित टुकड़े होते हैं जो विशेष देशों और संस्कृतियों के लिए उपयोगी होते हैं।

इसके अलावा, आप आसानी से अपने स्वयं के कस्टम मॉडल फ़ील्ड लिख सकते हैं।

ध्यान दें

तकनीकी रूप से, ये मॉडल django.db.models.fields में परिभाषित किए django.db.models.fields , लेकिन सुविधा के लिए इन्हें django.db.models में आयात किया गया है; मानक कन्वेंशन from django.db import models उपयोग करना और from django.db import models रूप में फ़ील्ड्स को संदर्भित करना है models.<Foo>Field

क्षेत्र विकल्प

निम्नलिखित तर्क सभी क्षेत्र प्रकारों के लिए उपलब्ध हैं। सभी वैकल्पिक हैं।

null

Field.null

यदि True , तो Django डेटाबेस में रिक्त मान को NULL रूप में संग्रहीत करेगा। डिफ़ॉल्ट False

स्ट्रिंग-आधारित फ़ील्ड जैसे कि CharField और CharField पर null उपयोग से बचें। यदि किसी स्ट्रिंग-आधारित फ़ील्ड में null=True , तो इसका मतलब है कि उसके पास "बिना डेटा" के दो संभावित मान हैं: NULL , और खाली स्ट्रिंग। ज्यादातर मामलों में, "कोई डेटा नहीं" के लिए दो संभावित मानों का होना अतिरेक है, Django सम्मेलन खाली स्ट्रिंग का उपयोग करना है, न कि NULL । एक अपवाद तब होता है जब एक CharField में unique=True और blank=True सेट दोनों होते हैं। इस स्थिति में, null=True मानों के साथ कई ऑब्जेक्ट्स को सहेजते समय अद्वितीय बाधा उल्लंघन से बचने के लिए null=True की आवश्यकता होती है।

दोनों स्ट्रिंग-आधारित और गैर-स्ट्रिंग-आधारित फ़ील्ड के लिए, आपको blank=True सेट करने की आवश्यकता होगी यदि आप प्रपत्रों में रिक्त मानों को अनुमति देना चाहते हैं, क्योंकि null पैरामीटर केवल डेटाबेस संग्रहण ( blank देखें) को प्रभावित करता है।

ध्यान दें

Oracle डेटाबेस बैकएंड का उपयोग करते समय, इस विशेषता की परवाह किए बिना रिक्त स्ट्रिंग को निरूपित करने के लिए NULL को संग्रहीत किया जाएगा।

blank

Field.blank

यदि True , तो फ़ील्ड रिक्त होने की अनुमति है। डिफ़ॉल्ट False

ध्यान दें कि यह null से अलग है। null विशुद्ध रूप से डेटाबेस से संबंधित है, जबकि blank सत्यापन से संबंधित है। यदि किसी फ़ील्ड में blank=True , तो प्रपत्र सत्यापन रिक्त मान के प्रवेश की अनुमति देगा। यदि किसी फ़ील्ड में blank=False , तो फ़ील्ड की आवश्यकता होगी।

choices

Field.choices

इस क्षेत्र के विकल्पों के रूप में उपयोग करने के लिए एक iterable (उदाहरण के लिए, एक सूची या टुपल) बिल्कुल दो वस्तुओं (जैसे [(A, B), (A, B) ...] ) के पुनरावृत्तियों से मिलकर बनता है। यदि विकल्प दिए गए हैं, तो वे मॉडल सत्यापन द्वारा लागू किए जाते हैं और डिफ़ॉल्ट रूप विजेट मानक टेक्स्ट फ़ील्ड के बजाय इन विकल्पों के साथ एक चयन बॉक्स होगा।

प्रत्येक टपल में पहला तत्व मॉडल पर सेट किया जाने वाला वास्तविक मूल्य है, और दूसरा तत्व मानव-पठनीय नाम है। उदाहरण के लिए:

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
)

आमतौर पर, एक मॉडल वर्ग के अंदर विकल्पों को परिभाषित करना सबसे अच्छा है, और प्रत्येक मूल्य के लिए उपयुक्त-नामित स्थिरांक को परिभाषित करना है:

from django.db import models

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = (
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    )
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)

यद्यपि आप एक मॉडल वर्ग के बाहर एक विकल्प सूची को परिभाषित कर सकते हैं और फिर इसे संदर्भित कर सकते हैं, मॉडल वर्ग के अंदर प्रत्येक पसंद के लिए विकल्पों और नामों को परिभाषित करते हुए उस सभी जानकारी को उस वर्ग के साथ रखता है जो इसका उपयोग करता है, और विकल्पों को संदर्भित करना आसान बनाता है ( उदाहरण के लिए, Student.SOPHOMORE कहीं भी काम करेगा कि Student मॉडल आयात किया गया है)।

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

MEDIA_CHOICES = (
    ('Audio', (
            ('vinyl', 'Vinyl'),
            ('cd', 'CD'),
        )
    ),
    ('Video', (
            ('vhs', 'VHS Tape'),
            ('dvd', 'DVD'),
        )
    ),
    ('unknown', 'Unknown'),
)

प्रत्येक टपल में पहला तत्व समूह पर लागू होने वाला नाम है। दूसरा तत्व 2-ट्यूपल का एक चलने योग्य है, जिसमें प्रत्येक 2-ट्यूपल में एक मान और विकल्प के लिए एक मानव-पठनीय नाम है। समूहीकृत विकल्पों को एकल सूची (जैसे इस उदाहरण में unknown विकल्प) के भीतर अनियंत्रित विकल्पों के साथ जोड़ा जा सकता है।

प्रत्येक मॉडल फ़ील्ड जिसमें choices सेट हैं, Django फ़ील्ड के वर्तमान मान के लिए मानव-पठनीय नाम को पुनः प्राप्त करने के लिए एक विधि जोड़ देगा। डेटाबेस एपीआई प्रलेखन में get_FOO_display() देखें।

ध्यान दें कि विकल्प किसी भी चलने योग्य वस्तु हो सकते हैं - जरूरी नहीं कि एक सूची या टपल। यह आपको गतिशील रूप से विकल्पों का निर्माण करने देता है। लेकिन अगर आप अपने आप को हैकिंग के choices को गतिशील पाते हैं, तो आप शायद ForeignKey साथ एक उचित डेटाबेस टेबल का उपयोग करना बेहतर ForeignKey choices स्थैतिक डेटा के लिए होता है जो कभी नहीं बदलता है।

जब तक blank default के साथ फ़ील्ड पर सेट नहीं किया जाता है, तब "---------" वाले एक लेबल का चयन बॉक्स के साथ किया जाएगा। इस व्यवहार को ओवरराइड करने के लिए, None युक्त choices में एक टपल जोड़ें; उदाहरण के लिए (None, 'Your String For Display') । वैकल्पिक रूप से, आप खाली स्ट्रिंग का उपयोग कर सकते हैं इसके बजाय None जहां यह समझ में आता है - जैसे कि CharField

db_column

Field.db_column

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

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

db_index

Field.db_index

यदि True , तो इस क्षेत्र के लिए एक डेटाबेस इंडेक्स बनाया जाएगा।

db_tablespace

Field.db_tablespace

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

default

Field.default

फ़ील्ड के लिए डिफ़ॉल्ट मान। यह एक मूल्य या एक कॉल करने योग्य वस्तु हो सकती है। यदि कॉल करने योग्य है तो हर बार एक नई वस्तु बनाई जाएगी।

डिफ़ॉल्ट एक उत्परिवर्तनीय वस्तु नहीं हो सकती (मॉडल उदाहरण, list , set , आदि), उस वस्तु के समान उदाहरण के संदर्भ के रूप में सभी नए मॉडल उदाहरणों में डिफ़ॉल्ट मान के रूप में उपयोग किया जाएगा। इसके बजाय, वांछित डिफ़ॉल्ट को कॉल करने योग्य में लपेटें। उदाहरण के लिए, यदि आप JSONField लिए डिफ़ॉल्ट डिफॉल्ट निर्दिष्ट करना चाहते हैं, तो फ़ंक्शन का उपयोग करें:

def contact_default():
    return {"email": "[email protected]"}

contact_info = JSONField("ContactInfo", default=contact_default)

lambda s को default जैसे फ़ील्ड विकल्पों के लिए उपयोग नहीं किया जा सकता है क्योंकि उन्हें माइग्रेशन द्वारा क्रमबद्ध नहीं किया जा सकता है। अन्य कैविटीज़ के लिए वह दस्तावेज़ देखें।

ForeignKey जैसे क्षेत्रों के लिए जो मॉडल उदाहरणों के लिए मैप करते हैं, डिफॉल्ट को उन क्षेत्रों का मान होना चाहिए जो वे मॉडल उदाहरणों के बजाय संदर्भित करते हैं (जब तक कि to_field सेट नहीं to_field है)।

जब नए मॉडल इंस्टेंस बनाए जाते हैं और फ़ील्ड के लिए कोई मान प्रदान नहीं किया जाता है, तो डिफ़ॉल्ट मान का उपयोग किया जाता है। जब फ़ील्ड प्राथमिक कुंजी होती है, तो डिफ़ॉल्ट का उपयोग तब भी किया जाता है जब फ़ील्ड को किसी पर सेट None

editable

Field.editable

यदि False , तो फ़ील्ड को व्यवस्थापक या किसी अन्य ModelForm में प्रदर्शित नहीं किया जाएगा। मॉडल सत्यापन के दौरान उन्हें छोड़ दिया जाता है। डिफ़ॉल्ट True

error_messages

Field.error_messages

error_messages तर्क आपको डिफ़ॉल्ट संदेशों को ओवरराइड करने देता है जो फ़ील्ड बढ़ाएगा। उन कुंजियों के साथ एक शब्दकोश में पास करें जिसमें त्रुटि संदेश मेल खाते हैं जिन्हें आप ओवरराइड करना चाहते हैं।

त्रुटि संदेश कुंजियों में null , blank , invalid , unique_for_date , unique , और unique_for_date । नीचे फ़ील्ड प्रकार अनुभाग में प्रत्येक फ़ील्ड के लिए अतिरिक्त त्रुटि संदेश कुंजियाँ निर्दिष्ट की गई हैं।

ये त्रुटि संदेश अक्सर प्रपत्रों के लिए प्रचारित नहीं करते हैं। मॉडल के error_messages के बारे में विचार देखें।

help_text

Field.help_text

प्रपत्र विजेट के साथ प्रदर्शित करने के लिए अतिरिक्त "सहायता" पाठ। यदि आपके फ़ील्ड का उपयोग किसी प्रपत्र पर नहीं किया गया है, तो भी यह प्रलेखन के लिए उपयोगी है।

ध्यान दें कि यह मान स्वचालित रूप से जनरेट किए गए प्रपत्रों में HTML-एस्केप नहीं है। यदि आप ऐसा चाहते हैं तो यह आपको help_text में HTML शामिल करने देता है। उदाहरण के लिए:

help_text="Please use the following format: <em>YYYY-MM-DD</em>."

वैकल्पिक रूप से आप किसी भी HTML विशेष वर्णों से बचने के लिए सादे पाठ और django.utils.html.escape() का उपयोग कर सकते हैं। सुनिश्चित करें कि आप किसी भी मदद पाठ से बचते हैं जो क्रॉस-साइट स्क्रिप्टिंग हमले से बचने के लिए अविश्वसनीय उपयोगकर्ताओं से आ सकता है।

primary_key

Field.primary_key

यदि True , तो यह फ़ील्ड मॉडल की प्राथमिक कुंजी है।

यदि आप अपने मॉडल में किसी भी क्षेत्र के लिए primary_key=True नहीं निर्दिष्ट करते हैं, तो Django स्वचालित रूप से प्राथमिक कुंजी रखने के लिए एक AutoField जोड़ देगा, इसलिए आपको अपने किसी भी फ़ील्ड पर primary_key=True सेट करने की आवश्यकता नहीं है, जब तक आप ओवरराइड नहीं करना चाहते। डिफ़ॉल्ट प्राथमिक-कुंजी व्यवहार। अधिक के लिए, स्वचालित प्राथमिक कुंजी फ़ील्ड देखें

primary_key=True अर्थ है null और unique=True । किसी ऑब्जेक्ट पर केवल एक प्राथमिक कुंजी की अनुमति है।

प्राथमिक कुंजी फ़ील्ड केवल-पढ़ने के लिए है। यदि आप किसी मौजूदा ऑब्जेक्ट पर प्राथमिक कुंजी का मान बदलते हैं और फिर उसे सहेजते हैं, तो पुराने के साथ एक नई ऑब्जेक्ट बनाई जाएगी।

unique

Field.unique

यदि True , तो यह फ़ील्ड पूरे तालिका में अद्वितीय होनी चाहिए।

यह डेटाबेस स्तर पर और मॉडल सत्यापन द्वारा लागू किया जाता है। यदि आप किसी unique=True फ़ील्ड में डुप्लिकेट मान वाले मॉडल को सहेजने का प्रयास करते हैं, तो django.db.IntegrityError मॉडल के save() विधि द्वारा उठाया जाएगा।

यह विकल्प OneToOneField और OneToOneField को छोड़कर सभी फ़ील्ड प्रकारों पर मान्य है।

ध्यान दें कि जब unique True , तो आपको db_index को निर्दिष्ट करने की आवश्यकता नहीं होती है, क्योंकि unique एक सूचकांक के निर्माण का अर्थ है।

unique_for_date

Field.unique_for_date

DateTimeField फ़ील्ड के मान के लिए यह फ़ील्ड विशिष्ट होने के लिए इसे DateField या DateTimeField के नाम पर सेट करें।

उदाहरण के लिए, यदि आपके पास एक फ़ील्ड title है जिसमें unique_for_date="pub_date" , तो Django एक ही title और pub_date साथ दो रिकॉर्ड दर्ज करने की अनुमति नहीं देगा।

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

यह मॉडल सत्यापन के दौरान Model.validate_unique() द्वारा लागू किया जाता है लेकिन डेटाबेस स्तर पर नहीं। यदि किसी भी unique_for_date बाधा में ऐसे फ़ील्ड शामिल होते हैं जो किसी unique_for_date हिस्सा नहीं होते हैं (उदाहरण के लिए, यदि फ़ील्ड में से एक को exclude या editable=False ), Model.validate_unique() उस विशेष बाधा के लिए सत्यापन छोड़ देगा।

unique_for_month

Field.unique_for_month

unique_for_date तरह, लेकिन महीने के संबंध में फ़ील्ड को विशिष्ट होना चाहिए।

unique_for_year

Field.unique_for_year

जैसे unique_for_date और unique_for_month

verbose_name

Field.verbose_name

क्षेत्र के लिए एक मानव-पठनीय नाम। यदि क्रिया नाम नहीं दिया गया है, तो Django स्वचालित रूप से फ़ील्ड के विशेषता नाम का उपयोग करके इसे बनाएगा, जो अंडरस्कोर को रिक्त स्थान में परिवर्तित करेगा। Verbose फ़ील्ड नाम देखें।

validators

Field.validators

इस क्षेत्र के लिए चलने के लिए सत्यापनकर्ताओं की एक सूची। अधिक जानकारी के लिए सत्यापनकर्ता दस्तावेज देखें।

पंजीकरण और लुकअप प्राप्त करना

Field लुकअप पंजीकरण API को लागू करता है । API का उपयोग यह देखने के लिए किया जा सकता है कि फ़ील्ड क्लास के लिए कौन से लुकअप उपलब्ध हैं, और लुकअप को किसी फ़ील्ड से कैसे लाया जाता है।

फ़ील्ड प्रकार

AutoField

class AutoField(**options) [source]

एक IntegerField जो उपलब्ध आईडी के अनुसार स्वचालित रूप से वेतन वृद्धि करता है। आपको आमतौर पर इसे सीधे उपयोग करने की आवश्यकता नहीं होगी; यदि आप अन्यथा निर्दिष्ट नहीं करते हैं तो एक प्राथमिक कुंजी फ़ील्ड आपके मॉडल में स्वचालित रूप से जुड़ जाएगी। स्वचालित प्राथमिक कुंजी फ़ील्ड देखें।

BigAutoField

class BigAutoField(**options) [source]

एक 64-बिट पूर्णांक, एक AutoField तरह, सिवाय इसके कि यह 1 से 9223372036854775807 नंबर पर फिट होने की गारंटी है।

BigIntegerField

class BigIntegerField(**options) [source]

64-बिट पूर्णांक, एक IntegerField तरह, IntegerField अलावा यह संख्या -9223372036854775808 से -9223372036854775808 तक फिट होने की गारंटी है। इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक TextInput

BinaryField

class BinaryField(max_length=None, **options) [source]

कच्चे बाइनरी डेटा को स्टोर करने के लिए एक क्षेत्र। यह केवल bytes असाइनमेंट का समर्थन करता है। विदित हो कि इस क्षेत्र में सीमित कार्यक्षमता है। उदाहरण के लिए, BinaryField वैल्यू पर क्वेरी को फ़िल्टर करना संभव नहीं है।

डिफ़ॉल्ट रूप से, BinaryField editable=False को False सेट करता है, जिस स्थिति में इसे एक ModelForm में शामिल नहीं किया जा सकता है।

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

पुराने संस्करण True editable स्थापित करने की अनुमति नहीं देते हैं।

BinaryField में एक अतिरिक्त वैकल्पिक तर्क है:

BinaryField.max_length

क्षेत्र की अधिकतम लंबाई (वर्णों में)। अधिकतम लंबाई MaxLengthValidator का उपयोग करके Django के सत्यापन में लागू की MaxLengthValidator

बाइनरीफिल्ड का BinaryField

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

BooleanField

class BooleanField(**options) [source]

एक सच्चा / झूठा क्षेत्र।

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट CheckboxInput , या NullBooleanSelect यदि null

BooleanField का डिफ़ॉल्ट मान None जब default परिभाषित नहीं है।

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

पुराने संस्करणों में, यह फ़ील्ड null=True अनुमति नहीं देती है, इसलिए आपको इसके बजाय NullBooleanField का उपयोग NullBooleanField होगा। बाद का उपयोग करना अब हतोत्साहित कर रहा है क्योंकि यह भविष्य के Django के संस्करण में पदावनत होने की संभावना है।

CharField

class CharField(max_length=None, **options) [source]

एक स्ट्रिंग फ़ील्ड, छोटे से बड़े आकार के तारों के लिए।

बड़ी मात्रा में पाठ के लिए, TextField का TextField

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक TextInput

CharField पास एक अतिरिक्त आवश्यक तर्क है:

CharField.max_length

क्षेत्र की अधिकतम लंबाई (वर्णों में)। MaxLengthValidator को डेटाबेस स्तर पर और Django के सत्यापन में MaxLengthValidator का उपयोग करके MaxLengthValidator

ध्यान दें

यदि आप एक एप्लिकेशन लिख रहे हैं जो कई डेटाबेस बैकएंड के लिए पोर्टेबल होना चाहिए, तो आपको पता होना चाहिए कि आपके बैकेंड के लिए max_length पर प्रतिबंध हैं। विवरण के लिए डेटाबेस बैकएंड नोट्स का संदर्भ लें।

DateField

class DateField(auto_now=False, auto_now_add=False, **options) [source]

एक तिथि, पायथन में एक datetime.date उदाहरण द्वारा प्रतिनिधित्व किया। कुछ अतिरिक्त, वैकल्पिक तर्क हैं:

DateField.auto_now

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

save() कॉल करने पर फ़ील्ड स्वचालित रूप से अपडेट हो जाती है। जब आप किसी अन्य क्षेत्र जैसे कि QuerySet.update() में अन्य फ़ील्ड्स के लिए अपडेट करते हैं, तो फ़ील्ड अपडेट नहीं किया जाता है, हालांकि आप उस तरह के अपडेट में फ़ील्ड के लिए कस्टम मान निर्दिष्ट कर सकते हैं।

DateField.auto_now_add

जब ऑब्जेक्ट पहली बार बनाया जाता है, तो स्वचालित रूप से फ़ील्ड को अब पर सेट करें। टाइमस्टैम्प के निर्माण के लिए उपयोगी। ध्यान दें कि वर्तमान तिथि हमेशा उपयोग की जाती है; यह केवल एक डिफ़ॉल्ट मान नहीं है जिसे आप ओवरराइड कर सकते हैं। इसलिए भले ही आप ऑब्जेक्ट बनाते समय इस फ़ील्ड के लिए कोई मान सेट करते हैं, पर ध्यान नहीं दिया जाएगा। यदि आप इस फ़ील्ड को संशोधित करना चाहते हैं, तो auto_now_add=True बजाय निम्नलिखित सेट करें:

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक TextInput । व्यवस्थापक एक जावास्क्रिप्ट कैलेंडर और "आज" के लिए एक शॉर्टकट जोड़ता है। एक अतिरिक्त invalid_date त्रुटि संदेश कुंजी शामिल है।

विकल्प auto_now_add , auto_now , और default परस्पर अनन्य हैं। इन विकल्पों में से किसी भी संयोजन में त्रुटि होगी।

ध्यान दें

जैसा कि वर्तमान में लागू किया गया है, auto_now या auto_now_add को True auto_now_add करने से फ़ील्ड editable=False और blank=True सेट हो जाएगा।

ध्यान दें

निर्माण के समय या अपडेट के समय auto_now_add समय पर auto_now और auto_now_add विकल्प हमेशा डिफ़ॉल्ट समय क्षेत्र में दिनांक का उपयोग करेंगे। यदि आपको कुछ अलग चाहिए, तो आप auto_now या auto_now_add का उपयोग करने के बजाय बस अपने स्वयं के auto_now करने योग्य डिफ़ॉल्ट या ओवरराइडिंग save() का उपयोग करने पर विचार कर सकते हैं; या DateField बजाय किसी DateTimeField का उपयोग DateField और यह निर्णय लेना कि प्रदर्शन समय पर तिथि से रूपांतरण को कैसे संभालना है।

DateTimeField

class DateTimeField(auto_now=False, auto_now_add=False, **options) [source]

डेट और datetime.datetime उदाहरण द्वारा पायथन में दर्शाई गई एक तारीख और समय। DateField के समान ही अतिरिक्त तर्क DateField

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक एकल TextInput । व्यवस्थापक जावास्क्रिप्ट शॉर्टकट के साथ दो अलग TextInput विगेट्स का उपयोग करता है।

DecimalField

class DecimalField(max_digits=None, decimal_places=None, **options) [source]

एक निश्चित-सटीक दशमलव संख्या, जिसे पायथन में एक Decimal उदाहरण द्वारा दर्शाया गया है। यह DecimalValidator का उपयोग करके इनपुट को मान्य करता है।

दो आवश्यक तर्क हैं:

DecimalField.max_digits

संख्या में अधिकतम अंकों की अनुमति है। ध्यान दें कि यह संख्या decimal_places से अधिक या उसके बराबर होनी चाहिए।

DecimalField.decimal_places

संख्या के साथ संग्रहीत करने के लिए दशमलव स्थानों की संख्या।

उदाहरण के लिए, 2 दशमलव स्थानों के रिज़ॉल्यूशन के साथ 999 तक की संख्या को स्टोर करने के लिए, आप इसका उपयोग करेंगे:

models.DecimalField(..., max_digits=5, decimal_places=2)

और 10 दशमलव स्थानों के संकल्प के साथ लगभग एक बिलियन तक की संख्या को स्टोर करने के लिए:

models.DecimalField(..., max_digits=19, decimal_places=10)

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक NumberInput जब localize False या TextInput अन्यथा है।

ध्यान दें

FloatField और DecimalField वर्गों के बीच अंतर के बारे में अधिक जानकारी के लिए, फ्लोटफिल्ड बनाम डेसीमलफिल्ड देखें

DurationField

class DurationField(**options) [source]

समय की अवधि के भंडारण के लिए एक क्षेत्र - timedelta द्वारा पायथन में मॉडलिंग की गई। जब PostgreSQL पर उपयोग किया जाता है, तो उपयोग किया जाने वाला डेटा प्रकार एक interval और Oracle पर डेटा प्रकार INTERVAL DAY(9) TO SECOND(6) । अन्यथा एक बड़े आकार के माइक्रोसेकंड का उपयोग किया जाता है।

ध्यान दें

ज्यादातर मामलों में DurationField साथ अंकगणित काम करता है। हालाँकि, PostgreSQL के अलावा अन्य सभी डेटाबेस पर, DateTimeField इंस्टेंस पर अंकगणित के लिए DurationField के मान की तुलना अपेक्षा के अनुरूप काम नहीं करेगा।

EmailField

class EmailField(max_length=254, **options) [source]

एक CharField जो जाँचता है कि मान EmailValidator का उपयोग करके एक वैध ईमेल पता है।

FileField

class FileField(upload_to=None, max_length=100, **options) [source]

फ़ाइल-अपलोड फ़ील्ड।

ध्यान दें

primary_key तर्क समर्थित नहीं है और यदि उपयोग किया जाता है तो त्रुटि उत्पन्न करेगा।

दो वैकल्पिक तर्क हैं:

FileField.upload_to

यह विशेषता अपलोड निर्देशिका और फ़ाइल नाम सेट करने का एक तरीका प्रदान करती है, और इसे दो तरीकों से सेट किया जा सकता है। दोनों ही मामलों में, मान Storage.save() पद्धति से पारित किया जाता है।

यदि आप एक स्ट्रिंग मान निर्दिष्ट करते हैं, तो इसमें strftime() स्वरूपण शामिल हो सकता है, जिसे फ़ाइल अपलोड की तारीख / समय से बदल दिया जाएगा (ताकि अपलोड की गई फाइलें दिए गए निर्देशिका को न भरें)। उदाहरण के लिए:

class MyModel(models.Model):
    # file will be uploaded to MEDIA_ROOT/uploads
    upload = models.FileField(upload_to='uploads/')
    # or...
    # file will be saved to MEDIA_ROOT/uploads/2015/01/30
    upload = models.FileField(upload_to='uploads/%Y/%m/%d/')

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

upload_to एक upload_to भी हो सकता है, जैसे कि एक फ़ंक्शन। यह फ़ाइलनाम सहित अपलोड पथ प्राप्त करने के लिए कहा जाएगा। इस कॉल करने योग्य को दो तर्कों को स्वीकार करना चाहिए और भंडारण प्रणाली के साथ पारित करने के लिए एक यूनिक्स-शैली पथ (आगे स्लैश के साथ) वापस करना चाहिए। दो तर्क हैं:

तर्क विवरण
instance

मॉडल का एक उदाहरण जहां FileField को परिभाषित किया गया है। अधिक विशेष रूप से, यह विशेष उदाहरण है जहां वर्तमान फ़ाइल संलग्न की जा रही है।

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

filename फ़ाइल नाम जो मूल रूप से फ़ाइल को दिया गया था। अंतिम गंतव्य पथ का निर्धारण करते समय इस पर ध्यान नहीं दिया जा सकता है या नहीं।

उदाहरण के लिए:

def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)
FileField.storage

एक भंडारण वस्तु, जो आपकी फ़ाइलों के भंडारण और पुनर्प्राप्ति को संभालती है। यह ऑब्जेक्ट प्रदान करने के तरीके के विवरण के लिए फ़ाइलों को प्रबंधित करना देखें।

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक ClearableFileInput

किसी मॉडल में FileField या ImageField (नीचे देखें) का उपयोग करना कुछ कदम लेता है:

  1. आपकी सेटिंग फ़ाइल में, आपको MEDIA_ROOT को एक निर्देशिका के पूर्ण पथ के रूप में परिभाषित करना होगा जहाँ आप Django को अपलोड की गई फ़ाइलों को संग्रहीत करना चाहते हैं। (प्रदर्शन के लिए, इन फ़ाइलों को डेटाबेस में संग्रहीत नहीं किया जाता है।) उस निर्देशिका के आधार सार्वजनिक URL के रूप में MEDIA_URL को परिभाषित करें। सुनिश्चित करें कि यह निर्देशिका वेब सर्वर के उपयोगकर्ता खाते द्वारा लिखने योग्य है।
  2. अपने मॉडल में FileField या ImageField को जोड़ें, अपलोड की गई फ़ाइलों के लिए उपयोग करने के लिए MEDIA_ROOT की एक उपनिर्देशिका निर्दिष्ट करने के लिए upload_to विकल्प को परिभाषित करते upload_to
  3. आपके डेटाबेस में संग्रहीत सभी फ़ाइल ( MEDIA_ROOT सापेक्ष) के लिए एक रास्ता है। आप सबसे अधिक संभावना Django द्वारा प्रदान की सुविधा url विशेषता का उपयोग करना चाहते हैं। उदाहरण के लिए, यदि आपके ImageField को mug_shot कहा जाता है, तो आप {{ object.mug_shot.url }} साथ टेम्पलेट में अपनी छवि के लिए पूर्ण पथ प्राप्त कर सकते हैं।

उदाहरण के लिए, MEDIA_ROOT लें कि आपका MEDIA_ROOT '/home/media' पर सेट है, और upload_to 'photos/%Y/%m/%d' upload_to का '%Y/%m/%d' भाग upload_to strftime() ; '%Y' चार-अंकीय वर्ष है, '%m' दो-अंकीय माह है और '%d' दो-अंकीय दिन है। यदि आप 15 जनवरी, 2007 को एक फ़ाइल अपलोड करते हैं, तो यह निर्देशिका /home/media/photos/2007/01/15 2007/01/15 में सहेजी जाएगी।

यदि आप अपलोड की गई फ़ाइल के डिस्क-फ़ाइल नाम, या फ़ाइल के आकार को पुनः प्राप्त करना चाहते हैं, तो आप क्रमशः name और size विशेषताओं का उपयोग कर सकते हैं; उपलब्ध विशेषताओं और विधियों के बारे में अधिक जानकारी के लिए, File वर्ग संदर्भ और प्रबंध फ़ाइल विषय मार्गदर्शिका देखें।

ध्यान दें

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

अपलोड की गई फ़ाइल का सापेक्ष URL url विशेषता का उपयोग करके प्राप्त किया जा सकता है। आंतरिक रूप से, यह अंतर्निहित Storage वर्ग के url() विधि को कहता है।

ध्यान दें कि जब भी आप अपलोड की गई फ़ाइलों से निपटते हैं, तो आपको सुरक्षा छेद से बचने के लिए, आपको ध्यान देना चाहिए कि आप उन्हें कहाँ अपलोड कर रहे हैं और वे किस प्रकार की फाइलें हैं। सभी अपलोड की गई फ़ाइलों को सत्यापित करें ताकि आप सुनिश्चित करें कि फ़ाइलें वही हैं जो आपको लगता है कि वे हैं। उदाहरण के लिए, यदि आप अपने वेब सर्वर के दस्तावेज़ रूट के भीतर किसी निर्देशिका के बिना किसी सत्यापन के बिना किसी फाइल को अपलोड करने की अनुमति देते हैं, तो कोई व्यक्ति CGI या PHP स्क्रिप्ट अपलोड कर सकता है और उस स्क्रिप्ट को आपकी साइट पर जाकर निष्पादित कर सकता है। अनुमति न दें।

यह भी ध्यान दें कि यहां तक ​​कि एक अपलोड की गई HTML फ़ाइल, चूंकि इसे ब्राउज़र द्वारा निष्पादित किया जा सकता है (हालांकि सर्वर द्वारा नहीं), XSS या CSRF हमलों के बराबर सुरक्षा खतरों को रोक सकता है।

FileField उदाहरण आपके डेटाबेस में varchar कॉलम के रूप में 100 वर्णों की डिफ़ॉल्ट अधिकतम लंबाई के साथ बनाए जाते हैं। अन्य क्षेत्रों के साथ, आप max_length तर्क का उपयोग करके अधिकतम लंबाई बदल सकते हैं।

FileField और FieldFile

class FieldFile [source]

जब आप किसी मॉडल पर FileField उपयोग करते हैं, तो आपको अंतर्निहित फ़ाइल तक पहुँचने के लिए प्रॉक्सी के रूप में FieldFile उदाहरण दिया जाता है।

FieldFile का API एक महत्वपूर्ण अंतर के साथ File दर्पण को FieldFile : कक्षा द्वारा लिपटी हुई वस्तु, जरूरी नहीं कि पायथन की बिल्ट-इन फ़ाइल ऑब्जेक्ट के आसपास एक आवरण हो। इसके बजाय, यह Storage.open() पद्धति के परिणाम के आसपास एक आवरण है, जो एक File ऑब्जेक्ट हो सकता है, या यह File API का एक कस्टम स्टोरेज कार्यान्वयन हो सकता है।

File से विरासत में मिली एपीआई जैसे कि read() और write() , FieldFile में कई तरीके शामिल हैं जिनका उपयोग अंतर्निहित फाइल के साथ बातचीत करने के लिए किया जा सकता है:

चेतावनी

डेटाबेस में संबंधित FieldFile के मॉडल ऑब्जेक्ट को सहेजने के लिए इस वर्ग के दो तरीके, save() और delete() , डिफ़ॉल्ट रूप से।

FieldFile.name

संबंधित FileField के Storage की जड़ से संबंधित पथ सहित फ़ाइल का नाम।

FieldFile.size

अंतर्निहित Storage.size() विधि का परिणाम है।

FieldFile.url

अंतर्निहित Storage वर्ग के url() पद्धति को कॉल करके फ़ाइल के सापेक्ष URL तक पहुंचने के लिए केवल पढ़ने के लिए संपत्ति।

FieldFile.open(mode='rb') [source]

निर्दिष्ट mode में इस उदाहरण से जुड़ी फ़ाइल को खोलता है या फिर से खोलता mode । मानक पायथन open() विधि के विपरीत, यह एक फ़ाइल विवरणक नहीं लौटाता है।

चूंकि अंतर्निहित फ़ाइल को इसे एक्सेस करते समय अंतर्निहित रूप से खोला जाता है, इसलिए इस पद्धति को कॉल करने के लिए अनावश्यक हो सकता है सिवाय इसके कि अंतर्निहित फ़ाइल को पॉइंटर रीसेट करने या mode को बदलने के लिए।

FieldFile.close() [source]

मानक पायथन file.close() तरह व्यवहार करता है। file.close() विधि और इस उदाहरण से जुड़ी फ़ाइल को बंद कर देता है।

FieldFile.save(name, content, save=True) [source]

यह विधि एक फ़ाइल नाम और फ़ाइल सामग्री लेती है और उन्हें फ़ील्ड के लिए संग्रहण वर्ग में भेजती है, फिर संग्रहीत फ़ाइल को मॉडल फ़ील्ड के साथ जोड़ देती है। यदि आप मैन्युअल रूप से फ़ाइल डेटा को अपने मॉडल पर FileField उदाहरणों के साथ FileField चाहते हैं, तो उस फ़ाइल डेटा को FileField लिए save() विधि का उपयोग किया जाता है।

दो आवश्यक तर्क देता है: वह name जो फ़ाइल का नाम है, और वह content जो फ़ाइल की सामग्री वाली एक वस्तु है। वैकल्पिक save तर्क नियंत्रित करता है कि इस क्षेत्र से जुड़ी फ़ाइल को बदलने के बाद मॉडल का उदाहरण सहेजा गया है या नहीं। True अवहेलना।

ध्यान दें कि content तर्क में File उदाहरण होना चाहिए, न कि पायथन की अंतर्निहित फ़ाइल ऑब्जेक्ट। आप इस तरह एक मौजूदा पायथन फ़ाइल ऑब्जेक्ट से एक File निर्माण कर सकते हैं:

from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)

या आप इस तरह से एक पायथन स्ट्रिंग से निर्माण कर सकते हैं:

from django.core.files.base import ContentFile
myfile = ContentFile("hello world")

अधिक जानकारी के लिए, फ़ाइलों को प्रबंधित करना देखें।

FieldFile.delete(save=True) [source]

इस उदाहरण से जुड़ी फ़ाइल को हटाता है और फ़ील्ड की सभी विशेषताओं को साफ़ करता है। नोट: यह विधि फ़ाइल को बंद कर देगी यदि यह तब होता है जब delete() कहा जाता है।

वैकल्पिक save तर्क नियंत्रित करता है कि इस क्षेत्र से जुड़ी फ़ाइल को हटाने के बाद मॉडल का उदाहरण सहेजा गया है या नहीं। True अवहेलना।

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

FilePathField

class FilePathField(path=None, match=None, recursive=False, max_length=100, **options) [source]

एक CharField जिसकी पसंद फाइलसिस्टम पर एक निश्चित निर्देशिका में फ़ाइल नाम तक सीमित है। तीन विशेष तर्क हैं, जिनमें से पहला आवश्यक है :

FilePathField.path

आवश्यक है। एक निर्देशिका से पूर्ण फाइलसिस्टम पथ, जहाँ से इस FilePathField को अपनी पसंद प्राप्त करनी चाहिए। उदाहरण: "/home/images"

FilePathField.match

वैकल्पिक। एक स्ट्रिंग के रूप में एक नियमित अभिव्यक्ति, जो FilePathField को फ़िल्टर करने के लिए उपयोग करेगी। ध्यान दें कि रेगेक्स को बेस फाइलनाम पर लागू किया जाएगा, न कि पूर्ण पथ पर। उदाहरण: "foo.*\.txt$" , जो कि foo23.txt नामक फाइल से मेल foo23.txt लेकिन bar.txt या foo23.png

FilePathField.recursive

वैकल्पिक। या तो True या False । डिफ़ॉल्ट False । निर्दिष्ट करता है कि क्या path सभी उपनिर्देशिका शामिल होने चाहिए

FilePathField.allow_files

वैकल्पिक। या तो True या False । डिफ़ॉल्ट True । निर्दिष्ट करता है कि निर्दिष्ट स्थान की फाइलें शामिल की जानी चाहिए या नहीं। या तो यह या allow_folders True होना चाहिए।

FilePathField.allow_folders

वैकल्पिक। या तो True या False । डिफ़ॉल्ट False । निर्दिष्ट करता है कि क्या निर्दिष्ट स्थान में फ़ोल्डर्स शामिल किए जाने चाहिए। या तो यह या allow_files True होना चाहिए।

बेशक, इन तर्कों का एक साथ उपयोग किया जा सकता है।

एक संभावित गोटा यह है कि match बेस फाइलनाम पर लागू होता है, पूर्ण पथ पर नहीं। तो, यह उदाहरण:

FilePathField(path="/home/images", match="foo.*", recursive=True)

... मिलान /home/images/foo.png होगा, लेकिन /home/images/foo.png नहीं, क्योंकि match आधार फ़ाइल नाम ( foo.png और foo.png ) पर लागू होता है।

FilePathField उदाहरण आपके डेटाबेस में varchar कॉलम के रूप में 100 वर्णों की डिफ़ॉल्ट अधिकतम लंबाई के साथ बनाए जाते हैं। अन्य क्षेत्रों के साथ, आप max_length तर्क का उपयोग करके अधिकतम लंबाई बदल सकते हैं।

FloatField

class FloatField(**options) [source]

एक फ्लोटिंग उदाहरण द्वारा पायथन में एक फ्लोटिंग-पॉइंट नंबर का प्रतिनिधित्व किया गया।

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक NumberInput जब localize False या TextInput अन्यथा है।

FloatField बनाम DecimalField

FloatField क्लास को कभी-कभी DecimalField क्लास के साथ मिलाया जाता है। यद्यपि वे दोनों वास्तविक संख्याओं का प्रतिनिधित्व करते हैं, वे उन संख्याओं का अलग-अलग प्रतिनिधित्व करते हैं। FloatField पायथन के float प्रकार का आंतरिक रूप से उपयोग करता है, जबकि DecimalField पायथन के Decimal प्रकार का उपयोग करता है। दोनों के बीच अंतर के बारे में जानकारी के लिए, decimal मॉड्यूल के लिए पायथन का प्रलेखन देखें।

ImageField

class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options) [source]

FileField से सभी विशेषताओं और विधियों को FileField , लेकिन यह भी पुष्टि करता है कि अपलोड की गई वस्तु एक वैध छवि है।

FileField लिए उपलब्ध विशेष विशेषताओं के अलावा, एक ImageField में height और width विशेषताएँ भी हैं।

उन विशेषताओं पर क्वेरी करने की सुविधा के लिए, ImageField पास दो अतिरिक्त वैकल्पिक तर्क हैं:

ImageField.height_field

एक मॉडल फ़ील्ड का नाम जो छवि की ऊंचाई के साथ ऑटो-पॉप्युलेटेड होगा, जब भी मॉडल का उदाहरण सहेजा जाता है।

ImageField.width_field

एक मॉडल फ़ील्ड का नाम जो छवि की चौड़ाई के साथ ऑटो-पॉप्युलेट किया जाएगा, जब भी मॉडल का उदाहरण सहेजा जाता है।

Pillow पुस्तकालय की आवश्यकता है।

ImageField उदाहरण आपके डेटाबेस में varchar कॉलम के रूप में 100 वर्णों की डिफ़ॉल्ट अधिकतम लंबाई के साथ बनाए जाते हैं। अन्य क्षेत्रों के साथ, आप max_length तर्क का उपयोग करके अधिकतम लंबाई बदल सकते हैं।

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक ClearableFileInput

IntegerField

class IntegerField(**options) [source]

पूर्णांक। Django द्वारा समर्थित सभी डेटाबेस में -2147483648 से 2147483647 तक के मूल्य सुरक्षित हैं।

यह डिफ़ॉल्ट डेटाबेस का समर्थन करने वाले मानों के आधार पर इनपुट को मान्य करने के लिए MinValueValidator और MaxValueValidator का उपयोग करता है।

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक NumberInput जब localize False या TextInput अन्यथा है।

GenericIPAddressField

class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options) [source]

एक IPv4 या IPv6 पता, स्ट्रिंग प्रारूप में (उदाहरण 192.0.2.30 या 2a02:42fe::4 )। इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक TextInput

IPv6 पता सामान्यीकरण RFC 4291 # अनुभाग-2.2 खंड 2.2 का अनुसरण करता है, जिसमें उस खंड के अनुच्छेद 3 में सुझाए गए IPv4 प्रारूप का उपयोग करना शामिल है, जैसे ::ffff:192.0.2.0 । उदाहरण के लिए, 2001:0::0:01 को 2001::1 , और ::ffff:0a0a:0a0a से ::ffff:10.10.10.10 । सभी वर्णों को लोअरकेस में बदल दिया जाता है।

GenericIPAddressField.protocol

निर्दिष्ट प्रोटोकॉल में मान्य इनपुट्स को सीमित करता है। स्वीकृत मान 'both' (डिफ़ॉल्ट), 'IPv4' या 'IPv6' । मिलान असंवेदनशील है।

GenericIPAddressField.unpack_ipv4

IPv4 मैप किए गए पते जैसे ::ffff:192.0.2.1 । यदि यह विकल्प सक्षम है तो पता 192.0.2.1 अनपैक किया जाएगा। डिफ़ॉल्ट अक्षम है। केवल तब उपयोग किया जा सकता है जब protocol 'both' सेट हो।

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

NullBooleanField

class NullBooleanField(**options) [source]

null=True साथ BooleanField तरह। इस क्षेत्र के बजाय इसका उपयोग करें क्योंकि यह भविष्य के Django के संस्करण में पदावनत होने की संभावना है।

PositiveIntegerField

class PositiveIntegerField(**options) [source]

एक की तरह IntegerField , लेकिन या तो सकारात्मक या शून्य होना चाहिए ( 0 )। से मूल्यों 0 को 2147483647 Django द्वारा समर्थित सभी डेटाबेस में सुरक्षित हैं। मान 0 को पश्चगामी संगतता कारणों के लिए स्वीकार किया जाता है।

PositiveSmallIntegerField

class PositiveSmallIntegerField(**options) [source]

एक की तरह PositiveIntegerField , लेकिन केवल एक निश्चित (डेटाबेस-निर्भर) बिंदु के तहत मूल्यों की अनुमति देता है। से मूल्यों 0 को 32767 Django द्वारा समर्थित सभी डेटाबेस में सुरक्षित हैं।

SlugField

class SlugField(max_length=50, **options) [source]

Slug एक अखबार का शब्द है। स्लग किसी चीज के लिए एक छोटा लेबल होता है, जिसमें केवल अक्षर, संख्या, अंडरस्कोर या हाइफ़न होते हैं। वे आमतौर पर URL में उपयोग किए जाते हैं।

एक CharField की तरह, आप निर्दिष्ट कर सकते हैं max_length (डेटाबेस पोर्टेबिलिटी के बारे में नोट पढ़ें और max_length उस खंड में भी) यदि max_length निर्दिष्ट नहीं है, तो Django 50 की डिफ़ॉल्ट लंबाई का उपयोग करेगा।

करने के db_index लिए सेटिंग लागू करता है True

यह अक्सर कुछ अन्य मूल्य के मूल्य के आधार पर एक SlugField को स्वचालित रूप से पूर्वनिर्मित करने के लिए उपयोगी होता है। आप व्यवस्थापक का उपयोग करके स्वचालित रूप से कर सकते हैं prepopulated_fields

यह सत्यापन के लिए उपयोग करता है validate_slug या validate_unicode_slug

SlugField.allow_unicode

यदि True , फ़ील्ड ASCII पत्रों के अतिरिक्त यूनिकोड अक्षरों को स्वीकार करता है। False करने के लिए चूक।

SmallIntegerField

class SmallIntegerField(**options) [source]

एक की तरह IntegerField , लेकिन केवल एक निश्चित (डेटाबेस-निर्भर) बिंदु के तहत मूल्यों की अनुमति देता है। से मूल्यों -32768 को 32767 Django द्वारा समर्थित सभी डेटाबेस में सुरक्षित हैं।

TextField

class TextField(**options) [source]

एक बड़ा पाठ क्षेत्र। इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक है Textarea

यदि आप एक max_length विशेषता निर्दिष्ट करते हैं , तो यह Textarea ऑटो-जनरेट किए गए फ़ॉर्म फ़ील्ड के विजेट में दिखाई देगा । हालाँकि यह मॉडल या डेटाबेस स्तर पर लागू नहीं होता है। उसके लिए उपयोग करें CharField

TimeField

class TimeField(auto_now=False, auto_now_add=False, **options) [source]

एक समय, एक datetime.time उदाहरण द्वारा पायथन में प्रतिनिधित्व किया गया । के रूप में एक ही ऑटो-जनसंख्या विकल्प स्वीकार करता है DateField

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक है TextInput । व्यवस्थापक कुछ जावास्क्रिप्ट शॉर्टकट जोड़ता है।

URLField

class URLField(max_length=200, **options) [source]

एक CharField एक यूआरएल, द्वारा मान्य के लिए URLValidator

इस फ़ील्ड के लिए डिफ़ॉल्ट फ़ॉर्म विजेट एक है TextInput

सभी CharField उपवर्गों की तरह , URLField वैकल्पिक max_length तर्क लेता है। यदि आप निर्दिष्ट नहीं करते हैं max_length , तो 200 का डिफ़ॉल्ट उपयोग किया जाता है।

UUIDField

class UUIDField(**options) [source]

सार्वभौमिक रूप से विशिष्ट पहचानकर्ताओं के भंडारण के लिए एक क्षेत्र। पायथन की UUID कक्षा का उपयोग करता है । जब PostgreSQL पर उपयोग किया जाता है, तो यह uuid डेटाटाइप में संग्रहीत होता है , अन्यथा एक में char(32)

वैश्विक एकमात्र पहचान करने के लिए एक अच्छा विकल्प हैं AutoField के लिए primary_key । डेटाबेस आपके लिए UUID उत्पन्न नहीं करेगा, इसलिए इसका उपयोग करने की अनुशंसा की जाती है default :

import uuid
from django.db import models

class MyUUIDModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    # other fields

ध्यान दें कि एक कॉल करने योग्य (कोष्ठक के साथ छोड़ा गया) को पारित किया जाता है default , उदाहरण के लिए नहीं UUID

संबंध क्षेत्र

Django भी खेतों के एक सेट को परिभाषित करता है जो संबंधों का प्रतिनिधित्व करते हैं।

ForeignKey

class ForeignKey(to, on_delete, **options) [source]

एक से कई रिश्ते। दो स्थितिगत तर्कों की आवश्यकता है: वह वर्ग जिससे मॉडल संबंधित है और on_delete विकल्प है।

एक पुनरावर्ती संबंध बनाने के लिए - एक ऐसी वस्तु जिसका स्वयं के साथ कई-से-एक संबंध है - उपयोग models.ForeignKey('self', on_delete=models.CASCADE)

यदि आपको किसी ऐसे मॉडल पर संबंध बनाने की आवश्यकता है जिसे अभी तक परिभाषित नहीं किया गया है, तो आप स्वयं मॉडल के बजाय मॉडल के नाम का उपयोग कर सकते हैं:

from django.db import models

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'Manufacturer',
        on_delete=models.CASCADE,
    )
    # ...

class Manufacturer(models.Model):
    # ...
    pass

अमूर्त मॉडल पर इस तरह से परिभाषित रिश्तों को हल किया जाता है जब मॉडल को एक ठोस मॉडल के रूप में उप-वर्गित किया जाता है और वे अमूर्त के सापेक्ष नहीं होते हैं app_label :

from django.db import models

class AbstractCar(models.Model):
    manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE)

    class Meta:
        abstract = True
from django.db import models
from products.models import AbstractCar

class Manufacturer(models.Model):
    pass

class Car(AbstractCar):
    pass

# Car.manufacturer will point to `production.Manufacturer` here.

किसी अन्य एप्लिकेशन में परिभाषित मॉडल को संदर्भित करने के लिए, आप स्पष्ट रूप से पूर्ण एप्लिकेशन लेबल के साथ एक मॉडल निर्दिष्ट कर सकते हैं। उदाहरण के लिए, यदि Manufacturer उपरोक्त मॉडल को किसी अन्य एप्लिकेशन में परिभाषित किया गया है production , जिसे आपको उपयोग करना होगा:

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'production.Manufacturer',
        on_delete=models.CASCADE,
    )

इस तरह के संदर्भ, जिसे एक आलसी संबंध कहा जाता है, दो अनुप्रयोगों के बीच परिपत्र आयात निर्भरता को हल करते समय उपयोगी हो सकता है।

एक डेटाबेस इंडेक्स अपने आप बनता है ForeignKey । आप सेट करके ऐसा निष्क्रिय कर सकते हैं db_index करने के लिए False । आप इंडेक्स के ओवरहेड से बचना चाह सकते हैं यदि आप जॉइन करने के बजाय स्थिरता के लिए एक विदेशी कुंजी बना रहे हैं, या यदि आप एक आंशिक या मल्टीपल कॉलम इंडेक्स जैसे वैकल्पिक इंडेक्स बना रहे होंगे।

डेटाबेस प्रतिनिधित्व

पर्दे के पीछे, Django "_id" अपने डेटाबेस कॉलम नाम बनाने के लिए फ़ील्ड नाम के लिए अपील करता है। उपरोक्त उदाहरण में, Car मॉडल के लिए डेटाबेस तालिका में एक manufacturer_id कॉलम होगा। (आप इसे स्पष्ट रूप से निर्दिष्ट करके बदल सकते हैं db_column ) हालांकि, आपके कोड को डेटाबेस कॉलम नाम से कभी भी निपटना नहीं चाहिए, जब तक कि आप कस्टम SQL नहीं लिखते। आप हमेशा अपने मॉडल ऑब्जेक्ट के फ़ील्ड नामों से निपटेंगे।

तर्क

ForeignKey अन्य तर्क स्वीकार करते हैं जो इस बात का विवरण परिभाषित करते हैं कि संबंध कैसे काम करता है।

ForeignKey.on_delete

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

user = models.ForeignKey(
    User,
    models.SET_NULL,
    blank=True,
    null=True,
)

के लिए संभावित मानों on_delete में पाए जाते हैं django.db.models :

  • CASCADE [source]

    कैस्केड हटाता है। Django SQL कसौटी पर DELETE CASCADE के व्यवहार का अनुकरण करता है और फॉरेनके युक्त ऑब्जेक्ट को भी हटा देता है।

    Model.delete() संबंधित मॉडल पर नहीं बुलाया गया है, pre_delete और post_delete सभी हटाए गए ऑब्जेक्ट के लिए सिग्नल भेजे जाते हैं।

  • PROTECT [source]

    ProtectedError उप- संदर्भ को हटाकर संदर्भित ऑब्जेक्ट को हटाएं django.db.IntegrityError

  • SET_NULL [source]

    ForeignKey अशक्त सेट करें ; यह तभी संभव है जब null ऐसा हो True

  • SET_DEFAULT [source]

    ForeignKey इसके डिफ़ॉल्ट मान पर सेट करें ; डिफ़ॉल्ट के लिए ForeignKey सेट होना चाहिए।

  • SET() [source]

    ForeignKey पास किए गए मान पर सेट करें SET() , या यदि कोई कॉल करने योग्य पास हो जाता है, तो उसे कॉल करने का परिणाम। ज्यादातर मामलों में, आपके मॉडल के आयात होने पर प्रश्नों को निष्पादित करने से बचने के लिए एक कॉल करने योग्य पास करना आवश्यक होगा:

    from django.conf import settings
    from django.contrib.auth import get_user_model
    from django.db import models
    
    def get_sentinel_user():
        return get_user_model().objects.get_or_create(username='deleted')[0]
    
    class MyModel(models.Model):
        user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.SET(get_sentinel_user),
        )
    
  • DO_NOTHING [source]

    कोई कदम मत उठाना। यदि आपका डेटाबेस बैकएंड संदर्भात्मक अखंडता को लागू करता है, तो यह django.db.IntegrityError तब तक कारण होगा जब तक आप मैन्युअल रूप ON DELETE से डेटाबेस क्षेत्र में SQL बाधा नहीं जोड़ते ।

ForeignKey.limit_choices_to

इस फ़ील्ड के लिए उपलब्ध विकल्पों के लिए एक सीमा निर्धारित करता है जब यह फ़ील्ड एक ModelForm या व्यवस्थापक का उपयोग करके प्रदान की जाती है (डिफ़ॉल्ट रूप से, क्वेरीसेट में सभी ऑब्जेक्ट चुनने के लिए उपलब्ध हैं)। या तो एक शब्दकोश, एक Q वस्तु, या एक शब्दकोश या Q वस्तु को लौटाने वाली एक कॉल करने योग्य का उपयोग किया जा सकता है।

उदाहरण के लिए:

staff_member = models.ForeignKey(
    User,
    on_delete=models.CASCADE,
    limit_choices_to={'is_staff': True},
)

ModelForm केवल Users उसी सूची को सूचीबद्ध करने के लिए संबंधित फ़ील्ड का कारण बनता है is_staff=True । यह Django व्यवस्थापक में सहायक हो सकता है।

उदाहरण के लिए, कॉल करने योग्य रूप सहायक हो सकता है, जब datetime तिथि सीमा द्वारा चयनों को सीमित करने के लिए पायथन मॉड्यूल के साथ संयोजन में उपयोग किया जाता है । उदाहरण के लिए:

def limit_pub_date_choices():
    return {'pub_date__lte': datetime.date.utcnow()}

limit_choices_to = limit_pub_date_choices

यदि कोई limit_choices_to है या रिटर्न देता है Q , जो जटिल प्रश्नों के लिए उपयोगी है , तो यह केवल व्यवस्थापक के लिए उपलब्ध विकल्पों पर प्रभाव डालेगा जब क्षेत्र मॉडल raw_id_fields के ModelAdmin लिए सूचीबद्ध नहीं है ।

ध्यान दें

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

ForeignKey.related_name

संबंधित वस्तु से संबंध के लिए उपयोग करने का नाम इस पर वापस। यह related_query_name (लक्ष्य मॉडल से रिवर्स फिल्टर नाम के लिए उपयोग करने के लिए नाम) के लिए डिफ़ॉल्ट मान भी है । पूर्ण विवरण और उदाहरण के लिए संबंधित वस्तुओं के दस्तावेज देखें । ध्यान दें कि अमूर्त मॉडल पर संबंधों को परिभाषित करते समय आपको यह मूल्य निर्धारित करना होगा ; और जब आप ऐसा करते हैं तो कुछ विशेष वाक्यविन्यास उपलब्ध होते हैं।

आप Django करना चाहते हैं तो एक पीछे की ओर संबंध नहीं बना करने के लिए, सेट related_name करने के लिए '+' या के साथ इसे समाप्त '+' । उदाहरण के लिए, यह सुनिश्चित करेगा कि User मॉडल का इस मॉडल से पीछे का संबंध नहीं होगा:

user = models.ForeignKey(
    User,
    on_delete=models.CASCADE,
    related_name='+',
)
ForeignKey.related_query_name

लक्ष्य मॉडल से रिवर्स फिल्टर नाम के लिए उपयोग करने का नाम। यह मान के लिए related_name या default_related_name यदि सेट है, अन्यथा यह मॉडल के नाम के लिए चूक करता है:

# Declare the ForeignKey with related_query_name
class Tag(models.Model):
    article = models.ForeignKey(
        Article,
        on_delete=models.CASCADE,
        related_name="tags",
        related_query_name="tag",
    )
    name = models.CharField(max_length=255)

# That's now the name of the reverse filter
Article.objects.filter(tag__name="important")

जैसे related_name , कुछ विशेष वाक्य रचना के related_query_name माध्यम से ऐप लेबल और वर्ग प्रक्षेप का समर्थन करता है ।

ForeignKey.to_field

संबंधित वस्तु पर वह क्षेत्र जिससे संबंध होना है। डिफ़ॉल्ट रूप से, Django संबंधित ऑब्जेक्ट की प्राथमिक कुंजी का उपयोग करता है। यदि आप किसी भिन्न फ़ील्ड का संदर्भ देते हैं, तो उस फ़ील्ड का होना आवश्यक है unique=True

ForeignKey.db_constraint

नियंत्रित करता है कि इस विदेशी कुंजी के लिए डेटाबेस में एक बाधा बनाई जाए या नहीं। डिफ़ॉल्ट है True , और यह लगभग निश्चित रूप से आप क्या चाहते हैं; यह False डेटा अखंडता के लिए बहुत खराब हो सकता है। उस ने कहा, यहाँ कुछ परिदृश्य हैं जहाँ आप यह करना चाहते हैं:

  • आपके पास विरासत डेटा है जो मान्य नहीं है।
  • आप अपने डेटाबेस को शार्प कर रहे हैं।

यदि यह सेट है False , तो संबंधित वस्तु तक पहुंचना जो मौजूद नहीं है, इसके DoesNotExist अपवाद को बढ़ाएगा ।

ForeignKey.swappable

यदि यह ForeignKey एक स्वैपेबल मॉडल की ओर इशारा कर रहा है तो माइग्रेशन फ्रेमवर्क की प्रतिक्रिया को नियंत्रित करता है । यदि यह है True - डिफ़ॉल्ट - तो यदि ForeignKey एक ऐसे मॉडल की ओर इशारा किया जाता है जो वर्तमान मूल्य settings.AUTH_USER_MODEL (या एक अन्य स्वैपेबल मॉडल सेटिंग) से मेल खाता है, तो संबंध सीधे मॉडल के लिए नहीं, सेटिंग के संदर्भ में माइग्रेशन में संग्रहीत किया जाएगा।

आप केवल इसे ओवरराइड करना चाहते हैं False यदि आप सुनिश्चित हैं कि आपका मॉडल हमेशा स्वैप किए गए मॉडल की ओर इंगित करना चाहिए - उदाहरण के लिए, यदि यह एक प्रोफ़ाइल मॉडल है जो विशेष रूप से आपके कस्टम उपयोगकर्ता मॉडल के लिए डिज़ाइन किया गया है।

इसे सेट करने का False मतलब यह नहीं है कि आप एक स्वैपेबल मॉडल को संदर्भित कर सकते हैं भले ही इसे स्वैप किया गया हो - False बस इसका मतलब यह है कि इस फॉरेनके के साथ किए गए माइग्रेशन हमेशा आपके द्वारा निर्दिष्ट सटीक मॉडल का संदर्भ देंगे (इसलिए उपयोगकर्ता द्वारा चलाने की कोशिश करने पर यह कठिन रूप से विफल हो जाएगा। उपयोगकर्ता मॉडल जिसका आप समर्थन नहीं करते हैं, उदाहरण के लिए)।

यदि संदेह है, तो इसके डिफ़ॉल्ट पर छोड़ दें True

ManyToManyField

class ManyToManyField(to, **options) [source]

एक से कई रिश्ते। वर्ग के लिए जो मॉडल से संबंधित है, जो बिल्कुल उसी के रूप में यह के लिए करता है काम करता है: एक स्थितीय तर्क की आवश्यकता होती है ForeignKey , सहित recursive और lazy संबंधों।

संबंधित ऑब्जेक्ट को फ़ील्ड के साथ जोड़ा, हटाया या बनाया जा सकता है RelatedManager

डेटाबेस प्रतिनिधित्व

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

तर्क

ManyToManyField तर्कों का एक अतिरिक्त सेट स्वीकार करता है - सभी वैकल्पिक - यह नियंत्रित करता है कि संबंध कैसे कार्य करता है।

ManyToManyField.related_name

के रूप में ही related_name

ManyToManyField.related_query_name

के रूप में ही related_query_name

ManyToManyField.limit_choices_to

के रूप में ही ForeignKey.limit_choices_to

limit_choices_to पैरामीटर ManyToManyField का उपयोग करके निर्दिष्ट कस्टम मध्यवर्ती तालिका के साथ उपयोग किए जाने पर कोई प्रभाव नहीं पड़ता है through

ManyToManyField.symmetrical

केवल स्वयं पर ManyToManyFields की परिभाषा में उपयोग किया जाता है। निम्नलिखित मॉडल पर विचार करें:

from django.db import models

class Person(models.Model):
    friends = models.ManyToManyField("self")

जब Django इस मॉडल को संसाधित करता है, तो यह पहचानता है कि यह ManyToManyField अपने आप में है, और परिणामस्वरूप, यह वर्ग में एक person_set विशेषता नहीं जोड़ता है Person । इसके बजाय, ManyToManyField सममित माना जाता है - अर्थात, अगर मैं आपका दोस्त हूं, तो आप मेरे दोस्त हैं।

यदि आप self सेट -टू-इन कई संबंधों में समरूपता नहीं चाहते हैं , तो सेट symmetrical करें False । यह Django को रिवर्स रिलेशनशिप के लिए डिस्क्रिप्टर को जोड़ने के लिए मजबूर करेगा, जिससे ManyToManyField रिश्ते गैर-सममित होंगे।

ManyToManyField.through

Django स्वचालित रूप से कई-से-कई संबंधों का प्रबंधन करने के लिए एक तालिका उत्पन्न करेगा। हालाँकि, यदि आप मध्यस्थ तालिका को मैन्युअल रूप से निर्दिष्ट करना चाहते हैं, तो आप through उस Django मॉडल को निर्दिष्ट करने के लिए विकल्प का उपयोग कर सकते हैं जो मध्यवर्ती तालिका का प्रतिनिधित्व करता है जिसे आप उपयोग करना चाहते हैं।

इस विकल्प के लिए सबसे आम उपयोग तब होता है जब आप अतिरिक्त डेटा को कई-से-कई संबंधों के साथ जोड़ना चाहते हैं ।

यदि आप एक स्पष्ट through मॉडल निर्दिष्ट नहीं करते हैं , तो अभी भी एक निहित through मॉडल वर्ग है जिसका उपयोग आप एसोसिएशन को रखने के लिए बनाई गई तालिका को सीधे एक्सेस करने के लिए कर सकते हैं। मॉडलों को जोड़ने के लिए इसके तीन क्षेत्र हैं।

यदि स्रोत और लक्ष्य मॉडल भिन्न होते हैं, तो निम्न फ़ील्ड उत्पन्न होते हैं:

  • id : संबंध की प्राथमिक कुंजी।
  • <containing_model>_id : id मॉडल कि वाणी की ManyToManyField
  • <other_model>_id : जिस id मॉडल को ManyToManyField इंगित करता है।

यदि एक ManyToManyField ही मॉडल से अंक और निम्न फ़ील्ड उत्पन्न होते हैं:

  • id : संबंध की प्राथमिक कुंजी।
  • from_<model>_id : id उदाहरण के लिए जो मॉडल (यानी स्रोत उदाहरण) को इंगित करता है।
  • to_<model>_id : id उदाहरण के लिए जो संबंध इंगित करता है (यानी लक्ष्य मॉडल उदाहरण)।

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

ManyToManyField.through_fields

केवल तब उपयोग किया जाता है जब एक कस्टम मध्यस्थ मॉडल निर्दिष्ट किया जाता है। Django सामान्य रूप से यह निर्धारित करेगा कि मध्यस्थ मॉडल के किन क्षेत्रों का उपयोग करके स्वचालित रूप से कई-से-कई संबंध स्थापित किए जाएं। हालाँकि, निम्नलिखित मॉडलों पर विचार करें:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(
        Person,
        through='Membership',
        through_fields=('group', 'person'),
    )

class Membership(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    inviter = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="membership_invites",
    )
    invite_reason = models.CharField(max_length=64)

Membership है दो विदेशी के लिए कुंजी Person ( person और inviter ) जो संबंध अस्पष्ट बना देता है और Django जो एक का उपयोग करने में पता नहीं कर सकते हैं। इस मामले में, आपको स्पष्ट रूप से निर्दिष्ट करना चाहिए कि कौन सी विदेशी कुंजी Django का उपयोग करना चाहिए through_fields , जैसा कि ऊपर दिए गए उदाहरण में।

through_fields 2-ट्यूपल को स्वीकार करता है ('field1', 'field2') , जहां field1 मॉडल के लिए विदेशी कुंजी का नाम ManyToManyField परिभाषित किया गया है ( group इस मामले में), और field2 लक्ष्य मॉडल के लिए विदेशी कुंजी का नाम ( person इस मामले में)।

जब आपके पास कई-से-कई संबंधों में भाग लेने वाले मॉडल के किसी भी (या यहां तक ​​कि दोनों) के लिए एक मध्यस्थ मॉडल पर एक से अधिक विदेशी कुंजी होती है, तो आपको निर्दिष्ट करना होगा through_fields । यह उन recursive पर भी लागू होता है जब एक मध्यस्थ मॉडल का उपयोग किया जाता है और मॉडल में दो से अधिक विदेशी कुंजी होती हैं, या आप स्पष्ट रूप से निर्दिष्ट करना चाहते हैं कि दो Django को किसका उपयोग करना चाहिए।

एक मध्यस्थ मॉडल का उपयोग करते हुए पुनरावर्ती संबंधों को हमेशा गैर-सममितीय के रूप में परिभाषित किया जाता है - अर्थात, इसके साथ symmetrical - इसलिए "स्रोत" और "लक्ष्य" की अवधारणा है। उस मामले 'field1' में संबंध के "स्रोत" और 'field2' "लक्ष्य" के रूप में माना जाएगा ।

ManyToManyField.db_table

कई डेटा को संग्रहीत करने के लिए बनाने के लिए तालिका का नाम। यदि यह प्रदान नहीं किया जाता है, तो Django के नामों के आधार पर एक डिफ़ॉल्ट नाम मान लिया जाएगा: रिश्ते को परिभाषित करने वाले मॉडल के लिए तालिका और स्वयं क्षेत्र का नाम।

ManyToManyField.db_constraint

मध्यस्थ तालिका में विदेशी कुंजी के लिए डेटाबेस में बाधाएं बनाई जानी चाहिए या नहीं, इस पर नियंत्रण होता है। डिफ़ॉल्ट है True , और यह लगभग निश्चित रूप से आप क्या चाहते हैं; यह False डेटा अखंडता के लिए बहुत खराब हो सकता है। उस ने कहा, यहाँ कुछ परिदृश्य हैं जहाँ आप यह करना चाहते हैं:

  • आपके पास विरासत डेटा है जो मान्य नहीं है।
  • आप अपने डेटाबेस को शार्प कर रहे हैं।

यह दोनों को पारित करने के लिए एक त्रुटि है db_constraint और through

ManyToManyField.swappable

यदि यह ManyToManyField एक स्वैपेबल मॉडल की ओर इशारा कर रहा है तो माइग्रेशन फ्रेमवर्क की प्रतिक्रिया को नियंत्रित करता है । यदि यह है True - डिफ़ॉल्ट - तो यदि ManyToManyField एक ऐसे मॉडल की ओर इशारा किया जाता है जो वर्तमान मूल्य settings.AUTH_USER_MODEL (या एक अन्य स्वैपेबल मॉडल सेटिंग) से मेल खाता है, तो संबंध सीधे मॉडल के लिए नहीं, सेटिंग के संदर्भ में माइग्रेशन में संग्रहीत किया जाएगा।

आप केवल इसे ओवरराइड करना चाहते हैं False यदि आप सुनिश्चित हैं कि आपका मॉडल हमेशा स्वैप किए गए मॉडल की ओर इंगित करना चाहिए - उदाहरण के लिए, यदि यह एक प्रोफ़ाइल मॉडल है जो विशेष रूप से आपके कस्टम उपयोगकर्ता मॉडल के लिए डिज़ाइन किया गया है।

यदि संदेह है, तो इसके डिफ़ॉल्ट पर छोड़ दें True

ManyToManyField समर्थन नहीं करता है validators

null कोई प्रभाव नहीं पड़ता क्योंकि डेटाबेस स्तर पर संबंध बनाने के लिए कोई रास्ता नहीं है।

OneToOneField

class OneToOneField(to, on_delete, parent_link=False, **options) [source]

एक-से-एक संबंध। वैचारिक रूप से, यह एक के ForeignKey साथ समान है unique=True , लेकिन संबंध के "रिवर्स" पक्ष सीधे एक ही वस्तु को वापस कर देगा।

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

एक स्थितिगत तर्क की आवश्यकता है: वह वर्ग जिससे मॉडल संबंधित होगा। यह बिल्कुल वैसा ही काम करता है जैसा कि यह करता है ForeignKey , जिसमें recursive और lazy रिश्तों के बारे में सभी विकल्प शामिल हैं ।

यदि आप के लिए related_name तर्क निर्दिष्ट नहीं करते हैं OneToOneField , तो Django वर्तमान मॉडल के निचले-केस नाम का उपयोग डिफ़ॉल्ट मान के रूप में करेगा।

निम्नलिखित उदाहरण के साथ:

from django.conf import settings
from django.db import models

class MySpecialUser(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    supervisor = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='supervisor_of',
    )

आपके परिणामी User मॉडल में निम्नलिखित विशेषताएं होंगी:

>>> user = User.objects.get(pk=1)
>>> hasattr(user, 'myspecialuser')
True
>>> hasattr(user, 'supervisor_of')
True

DoesNotExist यदि संबंधित तालिका में कोई प्रविष्टि मौजूद नहीं है, तो रिवर्स रिलेशन को एक्सेस करते समय एक अपवाद उठाया जाता है। उदाहरण के लिए, यदि उपयोगकर्ता के पास पर्यवेक्षक द्वारा निर्दिष्ट नहीं है MySpecialUser :

>>> user.supervisor_of
Traceback (most recent call last):
    ...
DoesNotExist: User matching query does not exist.

इसके अतिरिक्त, OneToOneField स्वीकार किए गए सभी अतिरिक्त तर्कों को स्वीकार करता है ForeignKey , साथ ही एक अतिरिक्त तर्क:

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

उदाहरण के उपयोग के लिए वन-टू-वन रिलेशनशिप देखें OneToOneField

फ़ील्ड API संदर्भ

class Field [source]

Field एक सार वर्ग है जो एक डेटाबेस टेबल कॉलम का प्रतिनिधित्व करता है। Django फ़ील्ड्स का उपयोग डेटाबेस तालिका ( db_type() ) बनाने के लिए करता है , पायथन प्रकारों को डेटाबेस ( get_prep_value() ) और इसके विपरीत ( from_db_value() ) में मैप करने के लिए ।

इस प्रकार एक क्षेत्र अलग-अलग Django एपीआई में एक मौलिक टुकड़ा है, विशेष रूप से, models और querysets

मॉडल में, एक क्षेत्र को एक वर्ग विशेषता के रूप में त्वरित किया जाता है और एक विशेष तालिका स्तंभ का प्रतिनिधित्व करता है, Models देखें । इसमें ऐसी विशेषताएँ हैं null और जैसे unique=True , और वे विधियाँ जो Django डेटाबेस-विशिष्ट मानों के लिए फ़ील्ड मान को मैप करने के लिए उपयोग करता है।

एक Field का एक उपवर्ग है RegisterLookupMixin और इस प्रकार दोनों Transform और Lookup से उपयोग करने के लिए उस पर पंजीकृत किया जा सकता QuerySet है (उदाहरण के लिए field_name__exact="foo" )। सभी अंतर्निहित लुकअप डिफ़ॉल्ट रूप से पंजीकृत हैं।

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

description

क्षेत्र का एक क्रिया विवरण, जैसे django.contrib.admindocs अनुप्रयोग के लिए।

विवरण फार्म का हो सकता है:

description = _("String (up to %(max_length)s)")

जहां तर्कों को क्षेत्र से प्रक्षेपित किया जाता है __dict__

Field डेटाबेस-विशिष्ट प्रकार के लिए मैप करने के लिए, Django कई तरीकों को उजागर करता है:

get_internal_type() [source]

विशिष्ट उद्देश्यों के लिए इस क्षेत्र का नामकरण एक स्ट्रिंग लौटाता है। डिफ़ॉल्ट रूप से, यह वर्ग नाम लौटाता है।

कस्टम फ़ील्ड में उपयोग के लिए अंतर्निहित फ़ील्ड प्रकार देखें ।

db_type(connection) [source]

Field खाते में लेने के लिए डेटाबेस स्तंभ डेटा प्रकार देता है connection

कस्टम फ़ील्ड में उपयोग के लिए कस्टम डेटाबेस प्रकार देखें ।

rel_db_type(connection) [source]

डेटाबेस कॉलम डेटा प्रकारों को फ़ील्ड्स के लिए लौटाता है जैसे ForeignKey और OneToOneField उस बिंदु को Field ध्यान में रखते हुए connection

कस्टम फ़ील्ड में उपयोग के लिए कस्टम डेटाबेस प्रकार देखें ।

तीन मुख्य परिस्थितियाँ हैं जहाँ Django को डेटाबेस बैकएंड और फ़ील्ड्स के साथ सहभागिता करने की आवश्यकता होती है:

  • जब यह डेटाबेस पर सवाल उठाता है (पायथन मूल्य -> ​​डेटाबेस बैकएंड मूल्य)
  • जब यह डेटाबेस से डेटा लोड करता है (डेटाबेस बैकेंड मूल्य -> ​​पायथन मूल्य)
  • जब यह डेटाबेस को बचाता है (पायथन मूल्य -> ​​डेटाबेस बैकएंड मूल्य)

क्वेरी करते समय, get_db_prep_value() और get_prep_value() इसका उपयोग किया जाता है:

get_prep_value(value) [source]

value मॉडल की विशेषता का वर्तमान मूल्य है, और विधि को एक प्रारूप में डेटा वापस करना चाहिए जो एक क्वेरी में पैरामीटर के रूप में उपयोग के लिए तैयार किया गया है।

उपयोग के लिए मूल्यों को क्वेरी करने के लिए पायथन वस्तुओं को परिवर्तित करना देखें ।

get_db_prep_value(value, connection, prepared=False) [source]

value बैकएंड-विशिष्ट मूल्य में कनवर्ट करता है। डिफ़ॉल्ट रूप से यह value अगर prepared=True और get_prep_value() यदि है तो लौटता है False

उपयोग के लिए डेटाबेस मानों में क्वेरी मान परिवर्तित करना देखें ।

डेटा लोड करते समय, from_db_value() उपयोग किया जाता है:

from_db_value(value, expression, connection)

डेटाबेस द्वारा पाइथन ऑब्जेक्ट पर लौटाए गए मान को परिवर्तित करता है। इसका उल्टा है get_prep_value()

इस पद्धति का उपयोग अधिकांश अंतर्निहित फ़ील्ड के लिए नहीं किया जाता है क्योंकि डेटाबेस बैकएंड पहले से ही सही पायथन प्रकार लौटाता है, या बैकेंड स्वयं रूपांतरण करता है।

उपयोग के लिए पायथन ऑब्जेक्ट्स में मान परिवर्तित करना देखें ।

ध्यान दें

प्रदर्शन कारणों से, from_db_value उन क्षेत्रों पर नो-ऑप के रूप में लागू नहीं किया जाता है, जिन्हें इसकी आवश्यकता नहीं है (सभी Django फ़ील्ड्स)। नतीजतन आप super अपनी परिभाषा में नहीं बुला सकते हैं ।

जब बचत, pre_save() और get_db_prep_save() उपयोग किया जाता है:

get_db_prep_save(value, connection) [source]

के रूप में भी get_db_prep_value() , लेकिन कहा जाता है जब क्षेत्र मान डेटाबेस को बचाया जाना चाहिए । डिफ़ॉल्ट रिटर्न द्वारा get_db_prep_value()

pre_save(model_instance, add) [source]

get_db_prep_save() सहेजे जाने से पहले मूल्य तैयार करने के लिए विधि को बुलाया जाता है (उदाहरण के लिए DateField.auto_now )।

model_instance उदाहरण है कि यह फ़ील्ड किससे संबंधित है और add क्या यह उदाहरण पहली बार डेटाबेस में सहेजा जा रहा है।

यह model_instance इस क्षेत्र के लिए उपयुक्त विशेषता के मूल्य को वापस करना चाहिए । विशेषता नाम में है self.attname (यह द्वारा सेट किया गया है Field )।

उपयोग के लिए सहेजने से पहले प्रीप्रोसेसिंग मान देखें ।

फ़ील्ड अक्सर अपने मूल्यों को एक अलग प्रकार के रूप में प्राप्त करते हैं, या तो क्रमबद्धता से या रूपों से।

to_python(value) [source]

मान को सही पाइथन ऑब्जेक्ट में परिवर्तित करता है। यह उल्टा काम करता है value_to_string() , और इसे अंदर बुलाया भी जाता है clean()

उपयोग के लिए पायथन ऑब्जेक्ट्स में मान परिवर्तित करना देखें ।

डेटाबेस को सहेजने के अलावा, फ़ील्ड को यह जानना भी आवश्यक है कि उसका मान कैसे बढ़ाया जाए:

value_from_object(obj) [source]

दिए गए मॉडल उदाहरण के लिए फ़ील्ड का मान लौटाता है।

इस विधि का उपयोग अक्सर किया जाता है value_to_string()

value_to_string(obj) [source]

obj एक स्ट्रिंग में कनवर्ट करता है। क्षेत्र के मूल्य को क्रमबद्ध करने के लिए उपयोग किया जाता है।

उपयोग के लिए क्रमांकन के लिए क्षेत्र डेटा परिवर्तित करना देखें ।

उपयोग करते समय ModelForm , यह Field जानने की जरूरत है कि इसे किस फार्म के क्षेत्र का प्रतिनिधित्व करना चाहिए:

formfield(form_class=None, choices_form_class=None, **kwargs) [source]

के django.forms.Field लिए इस फ़ील्ड का डिफ़ॉल्ट लौटाता है ModelForm

डिफ़ॉल्ट रूप से, यदि दोनों हैं form_class और choices_form_class हैं None , तो यह उपयोग करता है CharField । यदि फ़ील्ड में निर्दिष्ट नहीं है choices और choices_form_class वह उपयोग नहीं करता है TypedChoiceField

उपयोग के लिए मॉडल फ़ील्ड के लिए प्रपत्र फ़ील्ड निर्दिष्ट करना देखें ।

deconstruct() [source]

फ़ील्ड को फिर से बनाने के लिए पर्याप्त जानकारी के साथ 4-ट्यूपल लौटाता है:

  1. मॉडल पर फ़ील्ड का नाम।
  2. फ़ील्ड का आयात पथ (जैसे "django.db.models.IntegerField" )। यह सबसे पोर्टेबल संस्करण होना चाहिए, इसलिए कम विशिष्ट बेहतर हो सकता है।
  3. स्थिति संबंधी तर्कों की एक सूची।
  4. कीवर्ड तर्क का एक तानाशाही।

Migrations का उपयोग करके अपने डेटा को माइग्रेट करने के लिए 1.7 से पहले फ़ील्ड में इस विधि को जोड़ा जाना चाहिए ।

फ़ील्ड विशेषता संदर्भ

हर Field उदाहरण में कई विशेषताएं होती हैं जो उसके व्यवहार को आत्मनिरीक्षण करने की अनुमति देती हैं। isinstance जब आप कोड लिखना चाहते हैं तो चेक के बजाय इन विशेषताओं का उपयोग करें जो किसी फ़ील्ड की कार्यक्षमता पर निर्भर करता है। विशिष्ट फ़ील्ड प्रकारों की खोज को कम करने के लिए इन विशेषताओं का उपयोग Model._meta API के साथ किया जा सकता है । कस्टम मॉडल फ़ील्ड को इन झंडे को लागू करना चाहिए।

खेतों के लिए विशेषताएँ

Field.auto_created

बूलियन ध्वज जो इंगित करता है कि क्षेत्र स्वचालित रूप से बनाया गया था, जैसे कि OneToOneField मॉडल वंशानुक्रम द्वारा उपयोग किया जाता है।

Field.concrete

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

Field.hidden

बूलियन ध्वज जो इंगित करता है कि यदि किसी अन्य गैर-छिपे हुए फ़ील्ड की कार्यक्षमता (जैसे content_type और object_id फ़ील्ड जो बनाते हैं GenericForeignKey ) को वापस करने के लिए किसी फ़ील्ड का उपयोग किया जाता है । hidden झंडा क्या मॉडल पर सभी क्षेत्रों से मॉडल पर क्षेत्रों के सार्वजनिक सबसेट का गठन किया भेद करने के लिए प्रयोग किया जाता है।

ध्यान दें

Options.get_fields() डिफ़ॉल्ट रूप से छिपे हुए फ़ील्ड को बाहर करता है। include_hidden=True परिणामों में छिपे हुए क्षेत्रों को वापस करने के लिए पास करें ।

Field.is_relation

बूलियन ध्वज जो इंगित करता है अगर एक क्षेत्र (जैसे अपनी कार्यक्षमता के लिए एक या अधिक अन्य मॉडलों के संदर्भ हैं ForeignKey , ManyToManyField , OneToOneField , आदि)।

Field.model

उस मॉडल को लौटाता है जिस पर फ़ील्ड परिभाषित किया गया है। यदि किसी क्षेत्र को मॉडल के सुपरक्लास पर परिभाषित किया जाता है, तो सुपरक्लास का model उल्लेख करेगा, उदाहरण के वर्ग का नहीं।

संबंधों वाले क्षेत्रों के लिए गुण

इन विशेषताओं का उपयोग कार्डिनैलिटी और संबंध के अन्य विवरण के लिए क्वेरी करने के लिए किया जाता है। ये विशेषता सभी क्षेत्रों पर मौजूद हैं; हालाँकि, उनके पास केवल बूलियन मान होंगे (बजाय None ) यदि फ़ील्ड एक संबंध प्रकार ( Field.is_relation=True ) है।

Field.many_to_many

बूलियन ध्वज जो कि True क्षेत्र के कई-से-कई संबंध हैं; False अन्यथा। Django के साथ शामिल एकमात्र क्षेत्र जहां यह True है ManyToManyField

Field.many_to_one

बूलियन ध्वज जो कि True क्षेत्र का कई-से-एक संबंध है, जैसे कि ए ForeignKey ; False अन्यथा।

Field.one_to_many

बूलियन ध्वज जो कि True क्षेत्र का एक-से-कई संबंध है, जैसे कि GenericRelation या एक के विपरीत ForeignKey ; False अन्यथा।

Field.one_to_one

बूलियन ध्वज जो True अगर क्षेत्र का एक-से-एक संबंध है, जैसे कि ए OneToOneField ; False अन्यथा।

Field.related_model

क्षेत्र से संबंधित मॉडल के अंक। उदाहरण के लिए, Author में ForeignKey(Author, on_delete=models.CASCADE)related_model एक के लिए GenericForeignKey हमेशा होता है None

Original text