I have a simple view that I’m using to experiment with AJAX.
def get_shifts_for_day(request,year,month,day):
data= dict()
data['d'] =year
data['e'] = month
data['x'] = User.objects.all()[2]
return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')
This returns the following:
TypeError at /sched/shifts/2009/11/9/
<User: someguy> is not JSON serializable
If I take out the data[‘x’] line so that I’m not referencing any models it works and returns this:
{"e": "11", "d": "2009"}
Why can’t simplejson parse my one of the default django models? I get the same behavior with any model I use.
You just need to add, in your
.dumpscall, adefault=encode_mywayargument to letsimplejsonknow what to do when you pass it data whose types it does not know — the answer to your “why” question is of course that you haven’t told poorsimplejsonwhat to DO with one of your models’ instances.And of course you need to write
encode_mywayto provide JSON-encodable data, e.g.:Basically, JSON knows about VERY elementary data types (strings, ints and floats, grouped into dicts and lists) — it’s YOUR responsibility as an application programmer to match everything else into/from such elementary data types, and in
simplejsonthat’s typically done through a function passed todefault=atdumpordumpstime.Alternatively, you can use the
jsonserializer that’s part of Django, see the docs.