我正在使用Flask的SQLAlchemy扩展。在序列化我的模型时 (也用于数据库操作) 使用jsonpickle,我想要忽略一些特定的属性。有没有办法让我设定这些规则?
SQLAlchemy添加了一个名为的属性 _sa_instance_state
对象。总之,我不希望这个字段在JSON输出中。
我正在使用Flask的SQLAlchemy扩展。在序列化我的模型时 (也用于数据库操作) 使用jsonpickle,我想要忽略一些特定的属性。有没有办法让我设定这些规则?
SQLAlchemy添加了一个名为的属性 _sa_instance_state
对象。总之,我不希望这个字段在JSON输出中。
您不能告诉默认的类选择器忽略某些东西,不。
jsonpickle
不 支持 pickle
模 __getstate__
和 __setstate__
方法。如果您的类实现了这两个方法,那么返回的内容将被使用 jsonpickle
代替国家。这两种方法都需要实施。
如果 __getstate__
是 不 实施, jsonpickle
使用 __dict__
相反,属性,所以你自己的版本只需要使用相同的字典,删除 _sa_instance_state
钥匙,你完成了:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
随你 __getstate__
返回将进一步处理,递归,没有必要担心处理子对象。
如果加入 __getstate__
和 __setstate__
不是一个选项,你也可以注册一个 自定义序列化处理程序 为你的班级;缺点是虽然 __getstate__
只需返回一个字典就可以逃脱,自定义处理程序需要返回一个完全展平的值。
您不能告诉默认的类选择器忽略某些东西,不。
jsonpickle
不 支持 pickle
模 __getstate__
和 __setstate__
方法。如果您的类实现了这两个方法,那么返回的内容将被使用 jsonpickle
代替国家。这两种方法都需要实施。
如果 __getstate__
是 不 实施, jsonpickle
使用 __dict__
相反,属性,所以你自己的版本只需要使用相同的字典,删除 _sa_instance_state
钥匙,你完成了:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
随你 __getstate__
返回将进一步处理,递归,没有必要担心处理子对象。
如果加入 __getstate__
和 __setstate__
不是一个选项,你也可以注册一个 自定义序列化处理程序 为你的班级;缺点是虽然 __getstate__
只需返回一个字典就可以逃脱,自定义处理程序需要返回一个完全展平的值。