#原始方法:把所有属性拿出来一个个的放进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对象中多余的属性,包括自动检测外键到哪一层

 


GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐