【问题标题】:How to correctly deserialize datetime objects stored in JSONField with DjangoJSONEncoder?如何使用 DjangoJSONEncoder 正确反序列化存储在 JSONField 中的日期时间对象?
【发布时间】:2019-07-16 15:26:21
【问题描述】:

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

【问题讨论】:

    标签: django postgresql django-models django-jsonfield


    【解决方案1】:

    其实我觉得this post很好回答了这个问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多