programing

Django 1.9에서 JSONFiled(네이티브 포스트그레스 jsonb)를 사용하는 규약은 무엇입니까?

magicmemo 2023. 4. 6. 21:29
반응형

Django 1.9에서 JSONFiled(네이티브 포스트그레스 jsonb)를 사용하는 규약은 무엇입니까?

장고는 사용하지 말 것을 강력히 권한다.null=TrueCharField 및 TextField 문자열 기반 필드의 경우 "데이터 없음"에 대해 가능한 두 개의 값을 갖지 않도록 합니다(빈 문자열을 허용한다고 가정함).blank=True)이렇게 하는 것은 저에게 있어서 매우 의미가 있습니다.그리고 저는 모든 프로젝트에서 이 작업을 하고 있습니다.

Django 1.9는 기본 Postgres를 사용하는 JSONFiled를 도입했습니다.jsonbdata type 입니다.위의 제안이 JSONFiled(즉, JSONFiled)로 넘어갑니까?blank=True대신 사용해야 한다null=True( )? 또는,null=True사용하시겠습니까?또는, 해야 합니다.default=dict사용하시겠습니까?아니면, 왜?

즉, "데이터 없음" 값을 하나만 허용하려는 경우 새로운 네이티브 JSONFiled에 대한 규칙은 무엇입니까?제가 조사를 많이 해봤는데 공식 자료를 찾지 못했기 때문에 당신의 답변을 지지해 주세요.잘 부탁드립니다.

Django 코드에서 암시된 표기법은 빈 문자열이 아닌 늘 JSON 값을 저장하는 것으로 보입니다(NULL의 표기법).CharField)이렇게 말하는 이유는 다음과 같습니다.

empty_strings_allowed에서 상속됩니다.FieldCharField로 설정되어 있습니다.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/postgres/fields/jsonb.py#L13

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

이것이 원인입니다.CharField디폴트 설정""그리고.JSONField~에 대해서None이러한 필드의 값을 명시적으로 전달하지 않고 모델을 인스턴스화할 경우.

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

그러므로, 만약 당신이 그 일을 하고 싶다면,JSONField옵션, 다음을 사용해야 합니다.

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

만을 사용하는 경우blank=True에 대해서 하는 것처럼CharField, 를 얻을 수 있습니다.IntegrityError뛰려고 할 때MyModel.objects.create(...)한 번도 통과하지 않고json_field논점을 분명히 하다

JSONFiled에서는 디폴트값을 설정하지 않도록 주의해 주십시오.학생에게 실수를 저질렀습니다.{}그 결과 명시적으로 설정되지 않은 경우 새 개체는 마지막 개체 값을 받습니다.이것은 JSONFiled 고유의 Python 동작이며, 그것을 고려하는 것을 잊었습니다.

언급URL : https://stackoverflow.com/questions/36209336/in-django-1-9-whats-the-convention-for-using-jsonfield-native-postgres-jsonb

반응형