Django ORM показывает пустое JSONField, но postgreSQL показывает содержимое
Я использую Django (3.2.6) JSONField
для хранения данных geoJSON, с postgreSQL 10.14 на обратной стороне. Поля обычно определяются в классе следующим образом:
from django.db import models
from django.core.serializers.json import DjangoJSONEncoder
class BaseComponent(models.Model):
class Meta:
abstract = True
name = models.CharField(max_length=256, null=True, blank=True)
x = models.FloatField(null=True, blank=True)
y = models.FloatField(null=True, blank=True)
geometry = models.JSONField(null=True, blank=True, default=dict, encoder=DjangoJSONEncoder)
Я сохраняю значения в этих объектах и позже хочу получить поле JSON. Я делаю следующее в оболочке Django и могу показать, что поле геометрии представляет собой NoneType
без данных.
In [14]: obj.geometry
In [15]: type(obj.geometry)
Out[15]: NoneType
In [16]: obj.id
Out[16]: UUID('aed2fd38-28de-477d-bf4b-0d78b68bd729')
Однако, когда я вызываю те же данные обратно из связанной базы данных, я вижу следующее:
SELECT id, geometry FROM basecomponent_table WHERE id='aed2fd38-28de-477d-bf4b-0d78b68bd729';
id | geometry
--------------------------------------+---------------------------------------------
aed2fd38-28de-477d-bf4b-0d78b68bd729 | {"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[-121.018614, 42
.377513], [-121.01859, 42.377513], [-121.01859, 42.378199], [-121.018614, 42.378199], [-121.018614, 42.377513]]]}, "propertie
s": {...}}
(1 row)
Как такое может быть? Сохраненные данные даже выглядят как правильный JSON.
Несколько основных вещей, которые я пробовал до сих пор:
- Перезапуск моего окружения Docker
- Откат и миграции, связанные с полем JSON
- Варьирование кодировщиков
- Изменение значения поля по умолчанию (в настоящее время используется
dict
)