从jsonpickle.encode中排除django _state属性的简便方法

时间:2013-08-15 03:47:04

标签: python django jsonpickle

我有一个不是Django模型对象的python类:

class APIBase:
    data = object

    class Meta:
        abstract = True

    def toJSON(self):
        return jsonpickle.encode(self, unpicklable=False)

但是这个类的data属性可以包含一个Django模型,当它由jsonpickle编码时,JSON字符串包含Django的私有_state属性,我不想编码

有没有一种简单的方法可以排除这种情况而无需编写我自己的编码器?我可以依赖这样一个事实:只有data属性可以包含Django模型。

我还在学习python和django,但根据我的理解,约定是以下划线开头的任何属性都被认为是私有的,所以我很惊讶地看到它被编码。

1 个答案:

答案 0 :(得分:3)

想出来:

def toJSON(self):
    clone = copy.deepcopy(self)
    if getattr(clone.data, '_state', False):
        del clone.data._state
    return jsonpickle.encode(clone, unpicklable=False)