【发布时间】:2011-11-09 21:54:30
【问题描述】:
我是 Python 的新手,所以请放轻松。我正在 Django 中编写一个 AJAX 处理程序。到目前为止,一切都非常简单。在一天的大部分时间里,我一直在用头撞这个东西。我想返回一个 JSON 字符串,其中包含一个包含查询集的 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' )
我已经注释掉了两个序列化行,因为:
- 第一个似乎只适用于“简单”的 dicts,并且由于项目包含在我的 dicts 中,它失败了
[<Project: Project object>] is not JSON serializable - 第二个似乎只适用于查询集/模型,并且由于我的 dict 的“外部”部分是非模型的,它抱怨
'str' object has no attribute '_meta'。请注意,我使用 wadofstuff 序列化程序的理解是,它将解决我的模型中定义的 OneToMany 关系。但即使我仅通过序列化projects来实现此功能,输出中也没有任何 ProjectImages。
问题 1:序列化整个response_dict 的最佳方法是什么?当然,我不是第一个想要这样做的人,对吧?
问题 2:为什么我无法让多对一关系发挥作用?
非常感谢您的帮助。
更新:刚刚找到这个:Django JSON Serialization with Mixed Django models and a Dictionary,它看起来很有希望,但我得到了'QuerySet' object has no attribute '_meta' =(
【问题讨论】:
标签: python json serialization