Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python序列化(到JSON)问题_Python_Json_Serialization - Fatal编程技术网

Python序列化(到JSON)问题

Python序列化(到JSON)问题,python,json,serialization,Python,Json,Serialization,我对Python有点生疏,所以对我放松点。我正在用Django编写一个AJAX处理程序。到目前为止,这方面的一切都很直截了当。一天中的大部分时间里,我一直在用我的头撞这个东西。我想返回一个JSON字符串,该字符串包含一个包含queryset的dict: # # models.py # class Project(models.Model): unique_name = models.CharField(max_length=32, unique=True) title

我对Python有点生疏,所以对我放松点。我正在用Django编写一个AJAX处理程序。到目前为止,这方面的一切都很直截了当。一天中的大部分时间里,我一直在用我的头撞这个东西。我想返回一个JSON字符串,该字符串包含一个包含queryset的dict:

#
# 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' )
我已经注释掉了这两个序列化行,因为:

  • 第一种方法似乎只适用于“简单”dict,因为项目包含在我的dict中,所以在
    ]中失败。[]是不可JSON序列化的
  • 第二个似乎只适用于查询集/模型,因为dict的“外部”部分是非模型的,它抱怨
    “str”对象没有属性“\u meta”
    。请注意,我使用Wadofsuff序列化程序时理解到,它将解析模型中定义的OneToMany关系。但是,即使我只通过序列化
    项目
    来实现这一点,我的输出中也没有任何项目图像
  • 问题1:序列化整个
    响应的最佳方式是什么?当然,我不是第一个想这么做的人,对吧

    问题2:为什么我无法让多人关系发挥作用

    非常感谢你的帮助


    更新:刚刚发现了这个:看起来很有希望,但是我得到了
    'QuerySet'对象没有属性“\u meta”
    =(

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

    以下是需要了解的关键部分:

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

    这与哪个问题有关?第1个还是第2个?我想你的建议只允许我序列化queryset–如上所述,我已经可以这样做了,但是,我似乎不能在序列化结果中包含非queryset信息。这与问题#1有关,如果你序列化了项目,你应该能够序列化整个queryset回复指令:迟做总比不做强=)