Django 如何将model对象转json数据

#原始方法:把所有属性拿出来一个个的放进dict中,当然可以参考方法2,提取对象所有属性与值
#参考方法1: 简单版本
def convert_to_dicts(objs):
    '''把对象列表转换为字典列表'''
    obj_arr = []
     
    for o in objs:
        # 把Object对象转换成Dict
        dict = {}
        dict.update(o.__dict__)
        dict.pop("_state", None)#去除掉多余的字段
        obj_arr.append(dict)
     
    return obj_arr


调用:convert_to_dicts(modelName.objects.filter(id=1)) #必须是数组,非数组需要改进
 
#参考方法2:增加了日期类型判断
def convert_obj_to_dicts(model_obj):
    import inspect, types
    
    object_array = []
     
    for obj in model_obj:
#         obj.last_update_time = obj.last_update_time.isoformat()
#         obj.create_time = obj.create_time.isoformat()
        # 获取到所有属性
        field_names_list = obj._meta.get_all_field_names()
        print field_names_list
        for fieldName in field_names_list:
            try:
                fieldValue = getattr(obj, fieldName)  # 获取属性值
                print fieldName, "--", type(fieldValue), "--", hasattr(fieldValue, "__dict__")
                if type(fieldValue) is datetime.date or type(fieldValue) is datetime.datetime:
    #                     fieldValue = fieldValue.isoformat()
                    fieldValue = datetime.datetime.strftime(fieldValue, '%Y-%m-%d %H:%M:%S')
                # 没想好外键与cache字段的解决办法
#                 if hasattr(fieldValue, "__dict__"):
#                     fieldValue = convert_obj_to_dicts(model_obj)
            
                setattr(obj, fieldName, fieldValue)
#                 print fieldName, "\t", fieldValue
            except Exception, ex:
                print ex
                pass
        # 先把Object对象转换成Dict
        dict = {}
        dict.update(obj.__dict__)
        dict.pop("_state", None)  # 此处删除了model对象多余的字段
        object_array.append(dict)
    print object_array
    
    return object_array


调用:convert_obj_to_dicts(modelName.objects.filter(id=1)) #必须是数组,非数组需要改进
#参考方法3
from django.core import serializers
print serializers.serialize("json", modelName.objects.filter(id=32)) #非数组 好像也不能调用


本人是python初学者,上述仅供参考,如果有更好的建议,请多多指教


在上述方法2中,判断是否对象是否class 尝试用了好多方法 仍然没有能自动清除掉model对象中多余的属性,包括自动检测外键到哪一层

 


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值