如何使用 DjangoJSONEncoder 正确反序列化存储在 JSONField 中的日期时间对象?

How to correctly deserialize datetime objects stored in JSONField with DjangoJSONEncoder?

我使用 Django 2.1 和 PostgreSQL 将 datetime 对象存储在 JSONField 中,但我找不到正确反序列化的方法他们在查询数据库时:

我试过使用 DjangoJSONEncoder 它可以正确地进行序列化。 但是反序列化不能正常工作

class Book(models.Model):
    data = JSONField(encoder=DjangoJSONEncoder)


class BookTest(TestCase):
    def test_JSONField_deserialize(self):
        # record it in PostgreSQL Database :
        instance = Book.objects.create(data=
                                       {'date': tz.now()}
                                       )
        # Retrieve it from PostgreSQL Database :
        result = Book.objects.get(id=instance.id)
        # Test the type :
        self.assertEqual(type(result.data['date']), datetime)
AssertionError: <class 'str'> != <class 'datetime.datetime'>

我做错了什么? 我需要扩展 DjangoJSONEncoder 还是提供 .from_db_value() 自定义方法?

其实我觉得this post回答的很好

通过序列化为 JSON,dates/times 格式被松散,构建 decoder 在结构上意味着接受误报的风险。