Django 1.9에서 JSONFiled(네이티브 포스트그레스 jsonb)를 사용하는 규약은 무엇입니까?
장고는 사용하지 말 것을 강력히 권한다.null=True
CharField 및 TextField 문자열 기반 필드의 경우 "데이터 없음"에 대해 가능한 두 개의 값을 갖지 않도록 합니다(빈 문자열을 허용한다고 가정함).blank=True
)이렇게 하는 것은 저에게 있어서 매우 의미가 있습니다.그리고 저는 모든 프로젝트에서 이 작업을 하고 있습니다.
Django 1.9는 기본 Postgres를 사용하는 JSONFiled를 도입했습니다.jsonb
data type 입니다.위의 제안이 JSONFiled(즉, JSONFiled)로 넘어갑니까?blank=True
대신 사용해야 한다null=True
( )? 또는,null=True
사용하시겠습니까?또는, 해야 합니다.default=dict
사용하시겠습니까?아니면, 왜?
즉, "데이터 없음" 값을 하나만 허용하려는 경우 새로운 네이티브 JSONFiled에 대한 규칙은 무엇입니까?제가 조사를 많이 해봤는데 공식 자료를 찾지 못했기 때문에 당신의 답변을 지지해 주세요.잘 부탁드립니다.
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/postgres/fields/jsonb.py#L13
class JSONField(Field):
empty_strings_allowed = False
...
이것이 원인입니다.CharField
디폴트 설정""
그리고.JSONField
~에 대해서None
이러한 필드의 값을 명시적으로 전달하지 않고 모델을 인스턴스화할 경우.
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
'programing' 카테고리의 다른 글
Jquery Ajax 이전 전송 및 성공, 오류 및 완료 (0) | 2023.04.06 |
---|---|
번들 유효한 메시지를 표시해도 Webpack-dev-server가 번들되지 않음 (0) | 2023.04.06 |
각도 JS 수집되지 않은 오류: [$injector: modulerr] (0) | 2023.04.01 |
JavaScript의 eval에 JSON 데이터를 평가할 때 괄호가 필요한 이유는 무엇입니까? (0) | 2023.04.01 |
페이지를 스크롤할 때 요소를 숨기려면 어떻게 해야 합니까? (0) | 2023.04.01 |