我尝试在Django会话中存储以下几乎任意的类:
type Data struct {
DataFields []string
}
依次,class QuizInfo:
def __init__(self):
self.i_active_question = INVALID_PQA_ID # integer
self.sequence = []
列表中的每个项目都是QuizInfo.sequence
的实例:
AnsweredQuestion
我尝试将这样的数据结构存储在class AnsweredQuestion:
def __init__(self, i_question, i_answer):
self.i_question = i_question
self.i_answer = i_answer
中,如下所示:
HttpRequest.session
所以qi = QuizInfo()
qi.i_active_question = 5 # e.g.
qi.sequence.append(AnsweredQuestion(1, 2)) # e.g.
qi.sequence.append(AnsweredQuestion(3, 4)) # e.g.
quiz_id = 7 # e.g.
request.session['quiz_infos'] = {quiz_id : qi}
是request.session['quiz_infos']
键和int
值的字典。
我收到以下错误:
QuizInfo
如何使数据结构可JSON序列化?
我看到了其他问题,但是,那里的答案大多建议实现一个方法作为参数传递。但是在Django中该怎么做?
答案 0 :(得分:0)
使用__dict__
将其更改为字典。在您的情况下,虽然您有嵌套的对象,但也需要将其转换为字典。可以在jsbueno答案here中找到。基本上,您必须遍历对象以检查嵌套对象,例如
def my_dict(obj):
if not hasattr(obj,"__dict__"):
return obj
result = {}
for key, val in obj.__dict__.items():
if key.startswith("_"):
continue
element = []
if isinstance(val, list):
for item in val:
element.append(my_dict(item))
else:
element = my_dict(val)
result[key] = element
return result
编辑:
然后您可以将结果转储到这样的字符串中,
import json
json.dumps(result)
希望这会有所帮助!
答案 1 :(得分:0)