加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python序列化(到JSON)问题

发布时间:2020-12-20 13:24:41 所属栏目:Python 来源:网络整理
导读:我是 Python的新手,所以对我很轻松.我正在Django中编写一个AJAX处理程序.到目前为止,一切都非常直截了当.一天中的大部分时间里,我一直在反对这一点.我想返回一个包含一个包含查询集的dict的JSON字符串: ## models.py#class Project(models.Model): unique_n
我是 Python的新手,所以对我很轻松.我正在Django中编写一个AJAX处理程序.到目前为止,一切都非常直截了当.一天中的大部分时间里,我一直在反对这一点.我想返回一个包含一个包含查询集的dict的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' )

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

>第一个似乎只使用’简单’的dicts,因为项目包含在我的dict中,它失败了[< Project:Project object>]不是JSON可序列化的
>第二个似乎只适用于查询集/模型,因为我的dict的’外部’部分是非模型的,它抱怨’str’对象没有属性’_meta’.请注意,我正在使用wadofstuff序列化程序,并了解它将解析我的模型中定义的OneToMany关系.但即使我只通过序列化项目来实现这一点,我的输出中也没有任何ProjectImages.

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

问题2:为什么我无法使ManyToOne关系起作用?

非常感谢您的帮助.

更新:刚刚找到这个:Django JSON Serialization with Mixed Django models and a Dictionary它看起来很有希望,但我得到’QuerySet’对象没有属性’_meta’=(

解决方法

你无法像这样序列化python对象. django文档中有一节介绍如何操作.

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

以下是关键部分:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读