Python序列化(到JSON)问题

时间:2011-09-03 22:46:45

标签: python json serialization

我是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. 第二个似乎只适用于查询集/模型,因为我的dict的'外部'部分是非模型的,所以它会抱怨'str' object has no attribute '_meta'。请注意,我正在使用wadofstuff序列化程序,并了解它将解析我的模型中定义的OneToMany关系。但即使我只通过序列化projects来实现这一点,我的输出中也没有任何ProjectImages。
  3. 问题1:序列化整个response_dict的最佳方法是什么?当然,我不是第一个想要这样做的人,对吗?

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

    非常感谢你的帮助。

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

1 个答案:

答案 0 :(得分:1)

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

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

以下是关键部分:

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