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)
Вернуться на верх