PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trong Django 1.9, quy ước sử dụng JSONField (postgres jsonb gốc) là gì?

Quy ước được ngụ ý từ mã Django dường như là lưu trữ các giá trị JSON rỗng dưới dạng NULL trái ngược với một chuỗi trống (như quy ước cho CharField ). Tôi nói điều này vì những điều sau:

empty_strings_allowed được kế thừa từ Field trong CharField và được đặt thành True :

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

Trường lớp
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 tuy nhiên, ghi đè nó bằng False :

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

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

Điều này gây ra CharField được để mặc định thành ""JSONField của None khi bạn khởi tạo một mô hình mà không chuyển các giá trị cho các trường này một cách rõ ràng.

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 ""

Do đó, nếu bạn muốn tạo JSONField tùy chọn, bạn phải sử dụng:

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

Nếu bạn chỉ sử dụng blank=True , như bạn làm đối với CharField , bạn sẽ nhận được một IntegrityError khi cố gắng chạy MyModel.objects.create(...) mà không cần chuyển json_field đối số rõ ràng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm ràng buộc datetime vào chỉ mục một phần nhiều cột PostgreSQL

  2. Lỗi chuỗi byte không hợp lệ khi khôi phục cơ sở dữ liệu PostgreSQL

  3. Sự khác biệt giữa văn bản và varchar (ký tự thay đổi)

  4. Chuỗi có khóa chính tổng hợp

  5. Làm mới các chế độ xem cụ thể hóa với tính năng đồng thời