如何使用 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
在结构上意味着接受误报的风险。
我使用 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
在结构上意味着接受误报的风险。