PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Django 1.9 में, JSONField (देशी postgres jsonb) का उपयोग करने के लिए सम्मेलन क्या है?

Django कोड से निहित सम्मेलन शून्य JSON मानों को NULL के रूप में संग्रहीत करने के लिए प्रतीत होता है एक खाली स्ट्रिंग के विपरीत (जैसा कि CharField . के लिए सम्मेलन है) ) मैं निम्नलिखित के कारण ऐसा कह रहा हूं:

empty_strings_allowed Field . से इनहेरिट किया गया है CharField . में , और True . पर सेट है :

django/db/models/fields /__init__.py#L96

class Field(RegisterLookupMixin):
    """Base class for all field types"""

    # Designates whether empty strings fundamentally are allowed at the
    # database level.
    empty_strings_allowed = True
    ...

JSONField , हालांकि, इसे False . से ओवरराइड करता है :

django/contrib/postgres/fields /jsonb.py#L13

class JSONField(Field):
    empty_strings_allowed = False
    ...

यह CharField . का कारण बनता है डिफ़ॉल्ट रूप से "" . है और JSONField से None जब आप इन क्षेत्रों के मूल्यों को स्पष्ट रूप से पारित किए बिना किसी मॉडल को तुरंत चालू करते हैं।

django/db /मॉडल/फ़ील्ड/init .py#L791

def get_default(self):
    """
    Returns the default value for this field.
    """
    if self.has_default():
        if callable(self.default):
            return self.default()
        return self.default
    if (not self.empty_strings_allowed or (self.null and
               not connection.features.interprets_empty_strings_as_nulls)):
        return None
    return ""

इसलिए, यदि आप एक JSONField बनाना चाहते हैं वैकल्पिक, आपको उपयोग करना होगा:

json_field = JSONField(blank=True, null=True)

यदि आप केवल blank=True का उपयोग करते हैं , जैसा कि आप CharField . के लिए करेंगे , आपको एक IntegrityError मिलेगा MyModel.objects.create(...) run चलाने का प्रयास करते समय json_field passing पास किए बिना स्पष्ट रूप से तर्क।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP में डेटाटाइम से संबंधित संचालन करना

  2. plpgsql के अंदर \ set चर का उपयोग करें ब्लॉक घोषित करें

  3. pghoard विकल्प - क्लस्टरकंट्रोल के साथ PostgreSQL बैकअप प्रबंधन

  4. PL/pgSQL में BREAK स्टेटमेंट

  5. PostgreSQL क्वेरी के लिए सही इंडेक्स चुनना