Django, определяя тип json в модели, создает jsonb вместо json
Я использую JSONField для моей модели Django для типа JSON, но в фоновом режиме, он делает мои столбцы атрибутов типа JSONB
, что я не хочу делать здесь, потому что это нарушает мой точный порядок внутренних полей JSON, которые я выталкиваю из моего фронтенд приложения. Вы можете видеть, что порядок полей не является моим точным значением. Чтобы сохранить его как есть, мне нужно использовать JSON вместо jsonb. Поэтому мой вопрос в том, как это сделать?
Что я толкнул:
{
"type": "array",
"title": "action_right",
"additionalProperties": true,
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"label": {
"type": "string",
"custom_type": "string",
"title": "label",
"default": ""
},
"url": {
"type": "string",
"custom_type": "string",
"title": "url",
"default": ""
}
}
}
}
Что хранится:
{
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"url": {
"type": "string",
"title": "url",
"default": "",
"custom_type": "string"
},
"label": {
"type": "string",
"title": "label",
"default": "",
"custom_type": "string"
}
}
},
"title": "action_right",
"additionalProperties": true
}
Фрагменты кода:
class Component(models.Model):
name = models.CharField(max_length=200, unique=True)
attributes = models.JSONField(default=dict, help_text='Component attributes in JSONSchema')
Примечания:
PostgreSQL имеет два собственных типа данных на основе JSON: json и jsonb. Основное основное различие между ними заключается в том, как они хранятся и как их можно запрашивать. Поле json в PostgreSQL хранится как оригинальное строковое представление JSON и должно быть декодировано на лету при запросе на основе ключей. Поле jsonb хранится на основе фактической структуры JSON, что позволяет осуществлять индексирование. Компромиссом является небольшая дополнительная затраты на запись в поле jsonb. JSONField использует jsonb.