gpt4 book ai didi

Python 序列化(到 JSON)问题

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:37 24 4
gpt4 key购买 nike

我是 Python 的新手,所以请放轻松。我正在用 Django 编写 AJAX 处理程序。到目前为止,一切都非常简单。在一天的大部分时间里,我一直在努力解决这个问题。我想返回一个 JSON 字符串,其中包含一个包含查询集的字典:

#
# models.py
#

class Project(models.Model):
unique_name = models.CharField(max_length=32, unique=True)
title = models.CharField(max_length=255, blank=True)
description = models.TextField('project description', blank=True)
project_date = models.DateField('Project completion date')
published = models.BooleanField()

class ProjectImage(models.Model):
project = models.ForeignKey('Project', related_name='images')
image = models.ImageField(upload_to=get_image_path)
title = models.CharField(max_length=255)
sort_metric = models.IntegerField()


#
# views.py
#
...
projects = Project.Project.objects.filter(published=True)
...
response_dict({
'success' : True,
'maxGroups' : 5, # the result of some analysis on the projects queryset
'projects' : projects
});

# This one works if I remove 'projects' from the dict
# response = json.dumps( response_dict )

# This one works only on projects
# response = serializers.serialize( 'json', response_dict, relations=('images') )

return HttpResponse( response, mimetype='application/javascript' )

我已经注释掉了两条序列化行,因为:

  1. 第一个似乎只适用于“简单”指令,因为项目包含在我的指令中,所以它失败了 [<Project: Project object>] is not JSON serializable
  2. 第二个似乎只适用于查询集/模型,因为我的字典的“外部”部分是非模型,它提示 'str' object has no attribute '_meta' .请注意,我使用 wadofstuff 序列化程序时理解它会解析我的模型中定义的 OneToMany 关系。但即使我只通过序列化 projects 来实现它的工作, 输出中没有我的任何 ProjectImages。

问题 1:序列化整个 response_dict 的最佳方式是什么? ?当然,我不是第一个想这样做的人,对吧?

问题 2:为什么我无法使 ManyToOne 关系正常工作?

非常感谢您的帮助。

更新:刚找到这个:Django JSON Serialization with Mixed Django models and a Dictionary它看起来很有希望,但我得到了'QuerySet' object has no attribute '_meta' =(

最佳答案

你不能像那样序列化 python 对象。 django 文档中有一节介绍如何操作。

https://docs.djangoproject.com/en/dev/topics/serialization/#id2

这里是要看的关键部分:

json_serializer.serialize(queryset, ensure_ascii=False, stream=response)

关于Python 序列化(到 JSON)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296326/

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