Skip to main content
 首页 » 编程设计

python之从 jsonpickle.encode 中排除 django _state 属性的简单方法

2024年08月28日33mengfanrong

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

class APIBase: 
    data = object 
 
    class Meta: 
        abstract = True 
 
    def toJSON(self): 
        return jsonpickle.encode(self, unpicklable=False) 

但是这个类的data属性可以包含一个Django模型,当它被jsonpickle编码时,JSON字符串包含一个私有(private)的_state。来自 Django 的属性,我不想对其进行编码。

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

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

请您参考如下方法:

想通了:

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