gpt4 book ai didi

python - 如何将 django/python 中的模型对象列表序列化为 JSON

转载 作者:IT老高 更新时间:2023-10-28 21:05:49 26 4
gpt4 key购买 nike

我正在尝试序列化定义为的模型对象列表:

class AnalysisInput(models.Model):
input_user = models.CharField(max_length=45)
input_title = models.CharField(max_length=45)
input_date = models.DateTimeField()
input_link = models.CharField(max_length=100)

我为 json.dumps() 编写了一个自定义序列化器(编码器):

class AnalysisInputEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, AnalysisInput):
return { "input_id" : obj.id,
"input_user" : obj.input_user,
"input_title" : obj.input_title,
"input_date" : obj.input_date.isoformat(),
"input_link" : obj.input_link }
return json.JSONEncoder.default(self, obj)

当我只序列化一个对象时,我可以做到。当我尝试序列化我得到的对象列表时

[ objects..] is not JSON serializable

我搜索了但我没有找到工作的地方。我正在考虑为模型对象列表编写一个自定义序列化程序。

最佳答案

自定义编码器不会被递归调用。实际上你最好使用自定义编码器,而是在序列化之前将你的对象转换为简单的python类型。

您可以在模型中添加 as_json 或类似名称的方法,并在每次需要 JSON 结果时调用:

class AnalysisInput(models.Model):
input_user = models.CharField(max_length=45)
input_title = models.CharField(max_length=45)
input_date = models.DateTimeField()
input_link = models.CharField(max_length=100)

def as_json(self):
return dict(
input_id=self.id, input_user=self.input_user,
input_title=self.input_title,
input_date=self.input_date.isoformat(),
input_link=self.input_link)

那么在你看来:

# one result
return HttpResponse(json.dumps(result.as_json()), content_type="application/json")

# a list of results
results = [ob.as_json() for ob in resultset]
return HttpResponse(json.dumps(results), content_type="application/json")

关于python - 如何将 django/python 中的模型对象列表序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com