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

时间:2019-07-16 15:26:21

标签: django postgresql django-models django-jsonfield

我正在使用{strong> 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()自定义方法?

1 个答案:

答案 0 :(得分:0)

实际上,我认为this post很好地回答了这个问题。

通过序列化为JSON,可以松开日期/时间格式,并且构建decoder在结构上意味着要接受误报的风险。