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에서 상속됩니다.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 |