把一个对象转换成一个json或是一个字典类型。
在使用时,定义的表对象需要把他们转换成字典类型,字典到json的格式转换就很方便了
在使用sqlalchemy、orm时,写一个工具类,只提取对象的字段属性,简单好用:
class UtillyModel(): @staticmethod def to_dict(myself): # myself 是一个对象 result = {} for a in myself.__dict__: # filter inner field by fieldname if a.startswith('_') or a == 'metadata': continue result[a] = getattr(myself, a) return result
class RoleModel(models.Model, UtillyModel): name = models.CharField(max_length=255, verbose_name='角色名称') description = models.CharField(max_length=255, verbose_name='角色描述')
如果想提取更深层的对象属性,可以使用 dir(myself) 函数、myself.__dir__() 等;
例:
def to_dict(dumyself):
result = {}
for a in dir(dumyself):
# filter inner field by fieldname
if a.startswith('_') or a == 'metadata':
continue
v = getattr(dumyself, a)
# filter inner field by value type
if callable(v):
continue
if type(v) not in (types.NoneType, types.IntType, types.LongType, types.StringType, types.UnicodeType):
continue
result[a] = getattr(dumyself, a)
return resultdir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。过滤掉_(下划线)开头的属性、方法,过滤掉metadata,过滤掉函数方法。使用getattr()获取对应的属性值,并写入到字典中,最终返回
对象转字典小结:
1.过滤属性名和属性类型,得到符合要求的字段
2.获取字段对应的值
3.按照格式填充值