zoukankan      html  css  js  c++  java
  • python测试开发django-118.json 解析查询数据库 datetime 格式问题

    前言

    django 查询的结果有日期时间格式的时候,返回的是datetime.datetime(2021, 9, 8, 0, 0)类型数据。
    一般需要返回json格式数据,使用json.dumps()转的时候就会报错了

    查询带时间的

    Teacher模型有add_time日期时间类型DateTimeField

    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    class Teacher(models.Model):
        """老师表"""
        name = models.CharField(max_length=30)
        age = models.IntegerField(blank=True, null=True)
        tel = models.CharField(max_length=30)
        is_delete = models.CharField(max_length=10, default=0, blank=True)
        add_time = models.DateTimeField(auto_now=True,
                                        verbose_name="添加时间")
    
        def __str__(self):
            return self.name
    

    查询结果'add_time': datetime.datetime(2021, 9, 8, 0, 0)

    >python manage.py shell
    Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from yoyo.models import Teacher
    >>> Teacher.objects.all().values()
    <QuerySet [{'id': 1, 'name': '悠悠老师', 'age': 18, 'tel': '12313231', 'is_delete': '0', 'add_time': datetime.datetime(2021, 9, 8, 0, 0}, ]
    

    重写JSONEncoder

    Json 格式是由 JavaScript 对象为基础创建的轻量级数据格式,而 JS 没有 datetime 数据类型,所以在 Python 中使用 json.dumps 会报错。
    但是django查询数据库默认返回的时间日期就是datetime.datetime()格式的,直接用json.dumps()转会报错TypeError: Object of type 'datetime' is not JSON serializable

    import json
    import datetime
    # 作者-上海悠悠 QQ交流群:717225969
    # blog地址 https://www.cnblogs.com/yoyoketang/
    
    
    class DateEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, datetime.datetime):
                return obj.strftime("%Y-%m-%d %H:%M:%S")
            else:
                return json.JSONEncoder.default(self, obj)
    
    data = [{'id': 1, 'name': '悠悠老师', 'age': 18, 'tel': '12313231', 'is_delete': '0', 'add_time': datetime.datetime(2021, 9, 8, 0, 0)}]
    
    print(json.dumps(data, cls=DateEncoder))
    

    结果返回

    [{"id": 1, "name": "u60a0u60a0u8001u5e08", "age": 18, "tel": "12313231", "is_delete": "0", "add_time": "2021-09-08 00:00:00"}]
    

    django里面关于日期处理,可以看之前写的
    extra格式化日期时间https://www.cnblogs.com/yoyoketang/p/13215719.html
    ModelSerializer 序列号日期https://www.cnblogs.com/yoyoketang/p/14291166.html
    在Model模型自定义to_dict()方法可以完美解决 https://www.cnblogs.com/yoyoketang/p/15244171.html

  • 相关阅读:
    validform使用
    kindeditor使用
    初探uni-app
    【心有猛虎】react-lesson
    【心有猛虎】react-pxq
    【水滴石穿】douban-movies-react-native
    【水滴石穿】MyFirstRNDemo
    【水滴石穿】github_popular
    笔记本CPU的型号和类型的区分方法
    List<T>的IndexOf方法和Remove方法
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/15243653.html
Copyright © 2011-2022 走看看