2

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

我尝试使用DjangoJSONEncoderwhich 可以正常进行序列化。但是反序列化不能正常工作

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()自定义方法吗?

4

1 回答 1

0

实际上,我认为这篇文章很好地回答了这个问题。

通过序列化为 JSON,日期/时间格式变得松散,构建一个decoder在结构上意味着接受误报的风险。

于 2019-08-01T15:21:01.603 回答