Hi Russell, I bumped into the same issue today and was glad I found this post. However, I found that I had to use unicode() rather than str(), which turns your example into:
content = dict((key, [unicode(v) for v in values]) \ for key, values in form.errors.items()) With str() the proxy returns '<django.utils.functional.__proxy__ object at 0x83878ac>' (i.e. it only puts the name into quotes) On Oct 19, 6:14 am, "Russell Keith-Magee" <freakboy3...@gmail.com> wrote: > On Sun, Oct 19, 2008 at 12:58 AM, justind <justin.don...@gmail.com> wrote: > > > Hello, > > > No one has any ideas? > > Settle down, Tiger. You asked this question on a Friday night. You may > need to wait a little more than 18 hours if you want a response. > We're all volunteers here, and many of us have professional and family > obligations that take priority over answering questions on a mailing > list. > > To answer your question - although it may not be immediately obvious > to you _why_ this is occurring, the error message you have received > does tell you exactly _what_ is occurring. > > Although form.errors appears to be a dictionary containing strings > (i.e., a dictionay of lists of strings appear when you print > form.errors), it's actually an ErrorDict that contains ValidationError > objects. These, in turn, are manipulated in various ways to ensure > correct unicode output - and one of those manipulations is the use of > proxy objects (django.utils.functional.__proxy__). If you call str() > on a proxy object, it will evaluate and return the underlying string, > but the object itself isn't a string. > > SimpleJSON (and the Django copy of the SimpleJSON library) only knows > how to serialized basic Python types, so it complains when you give it > a proxy object. This use of proxy objects in this way was something > introduced by the introduction of full unicode support in Django. > Jacob's slide predate the introduction of feature, which explains why > the example he gave doesn't work out of the box with a more recent > Django version. > > However, If you force the rollout of the proxy objects before calling > dumps(), SimpleJSON will correctly encode the form errors. Something > like: > > >>> simplejson.dumps(dict((key,str(v) for v in values) for key,values in > >>> form.errors.items()) > > should do the trick. > > Yours, > Russ Magee %-) > > > The code I'm actually using in my view is almost identical to the > > validage_contact view from > >http://toys.jacobian.org/presentations/2007/oscon/tutorial/(single > > slide:http://toys.jacobian.org/presentations/2007/oscon/tutorial/images/dja...) > > and I'm using the JsonResponse function from those slides as well. > > > Has something changed since these were published? Is this a bug? > > > On Oct 17, 4:55 pm, "justin.don...@gmail.com" > > <justin.don...@gmail.com> wrote: > >> Hello, > > >> I'm having a hard time understanding why Django won't let me serialize > >> a dictionary of form errors. Can anyone explain why Django throws an > >> error if I try to serialize someform.errors, even if I copy it into a > >> plain dictionary? > > >> #!/usr/bin/env python > >> from django.utils import simplejson > >> from project.main.models import SampleForm > > >> test = {} > >> simplejson.dumps(test) # works > > >> test = {'key': [u"value"]} > >> simplejson.dumps(test) # works > > >> # suppose SampleForms wants a text and url field > >> # I just give it a text field to test > >> form = SampleForm({"text": "sample text"}) > >> d = {} # make a new dictionary > >> # update d so we're working with a plain dictionary > >> d.update(f.errors) > >> type(d) # returns dict > > >> # fails: <django.utils.functional.__proxy__ object at 0x00C83810> > >> # isnotJSONserializable > >> simplejson.dumps(d) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---