开发者

Python Serialization (to JSON) issue

开发者 https://www.devze.com 2023-04-02 01:29 出处:网络
I\'m a bit of a newbie in Python, so go easy on me.I\'m writing an AJAX handler in Django.Everything\'s been pretty straight-forward on this until now.I\'ve been banging my head against this bit for t

I'm a bit of a newbie in Python, so go easy on me. I'm writing an AJAX handler in Django. Everything's been pretty straight-forward on this until now. I've been banging my head against this bit for the better part of a day. I'd like to return a JSON string that contains a dict that contains a queryset:

#
# 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' )

I've commented out the two serialization lines, because:

  1. The first one seems to only work with 'simple' dicts and since projects is included in my dict, it fails with [<Project: Project object>] is not JSON serializable
  2. The second one seems to only work with querysets/models and since the 'outer' part of my dict is non-model, it complains that 'str' object has no attribute '_meta'. Note that I am using the wadofstuff serializer with the understanding that it would resolve the OneToMany relationship as defined in my model. But even when I get this working by only serializing projects, I do not have any of my ProjectImages in the output.

QUESTION 1: What is the best way to serialize the whole response_dict? Surely, I'm not the first person to want to do this, right?

QUESTION 2: Why am I unable to get the ManyToOne relationship to work?

Many thanks for your help.

UPDATE: Just found this one: Django JSON Serialization with Mixed Django models and a Dictionary and it looked promising, but I get 'QuerySet' object has no attribute '_meta' =(


You can't serialize a python object like that. There is a section in the django documentation on what to do.

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

Here is the key part to look at:

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

精彩评论

暂无评论...
验证码 换一张
取 消