PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Di Django 1.9, apa konvensi untuk menggunakan JSONField (postgres jsonb asli)?

Konvensi yang tersirat dari kode Django tampaknya menyimpan nilai null JSON sebagai NULL sebagai lawan sebagai string kosong (seperti konvensi untuk CharField ). Saya mengatakan ini karena hal berikut:

empty_strings_allowed diwarisi dari Field di CharField , dan disetel ke 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 , namun, menimpanya dengan False :

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

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

Hal ini menyebabkan CharField 's ke default ke "" dan JSONField ke None saat Anda membuat instance model tanpa secara eksplisit meneruskan nilai untuk bidang ini.

django/db /models/fields/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 ""

Oleh karena itu, jika Anda ingin membuat JSONField opsional, Anda harus menggunakan:

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

Jika Anda hanya menggunakan blank=True , seperti yang Anda lakukan untuk CharField , Anda akan mendapatkan IntegrityError ketika mencoba menjalankan MyModel.objects.create(...) tanpa melewati json_field argumen secara eksplisit.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghapus sejumlah baris tetap dengan penyortiran di PostgreSQL?

  2. Postgres menggabungkan beberapa Indeks

  3. Bagaimana cara mendapatkan daftar zona waktu yang didukung oleh PostgreSQL?

  4. Spring + Hibernate:Penggunaan Memori Cache Rencana Kueri

  5. Bagaimana cara mengubah pemilik database PostgreSql?