On Mar 15, 2:36 pm, Ben Dembroski <i...@ionraystudios.com> wrote:
> On Mar 15, 2:22 pm, Tom Evans <tevans...@googlemail.com> wrote:
>
>
>
> > On Tue, Mar 15, 2011 at 2:14 PM, Ben Dembroski <i...@ionraystudios.com> 
> > wrote:
> > > Hi all,
>
> > > I'm trying to pass a ValidationError as a string to a template, but I
> > > can't seem to determine where to find the 'special key' that is
> > > referred to in the documentation here:
>
> > >http://docs.djangoproject.com/en/dev/ref/models/instances/
>
> > > {quote}
> > > Any ValidationError raised by Model.clean() will be stored under a
> > > special key that is used for errors that are tied to the entire model
> > > instead of to a specific field. You can access these errors with
> > > NON_FIELD_ERRORS:
> > > {endquote}
>
> > > Here's my snippet of code:
>
> > >                        try:
> > >                                peep.save()
> > >                        except ValidationError, e:
> > >                                errormsg = e.invalid[NON_FIELD_ERRORS]
> > >                                form = EditPerson()
> > >                                return 
> > > render_to_response('personentry.html', { 'form' : form,
> > > 'errormsg': errormsg  },context_instance=RequestContext(request))
>
> > > The error is being thrown when when making an invalid entry into a
> > > DateField.  Using the code above, if I make:
> > > erromsg = e
>
> > > I get:
>
> > > [u'Invalid date: month must be in 1..12']
> > > or
> > > [u'Enter a valid date in YYYY-MM-DD format.']
>
> > > Are two examples, depending on what is passed to the model on
> > > peep.save().
> > > How can I find out what the 'special key' is ?
>
> > > Any ideas?
>
> > I'm confused about what you are actually asking. What doesn't work?
> > What error occurs? You say you can't determine the 'special key' - do
> > you mean NON_FIELD_ERRORS? The example clearly shows where to import
> > this constant from.
>
> > Your code is different from the example in the manual. You are
> > accessing e.invalid, where as the docs tell you to access
> > e.message_dict.
>
> > If you correct your code to fix these two points, and retry your code,
> > what happens? Details, not "it still doesn't work", please.
>
> > Cheers
>
> > Tom
>
> Hi Tom,
>
> Thanks for your reply. (You're right, my example was lousy).
>
> I did in fact try what you suggested earlier on, and got the the
> following error:
>
> AttributeError at /people/add/
>
> 'ValidationError' object has no attribute 'message_dict'
>
> Request Method:         POST
> Request URL:    http://localhost:8000/people/add/
> Django Version:         1.3 rc 1 SVN-15755
> Exception Type:         AttributeError
> Exception Value:
>
> 'ValidationError' object has no attribute 'message_dict'
>
> Exception Location:     /home/benjamin/Ion/ellieharrison/trajectories/
> views.py in playeradd, line 298
> Python Executable:      /usr/bin/python
> Python Version:         2.6.6
> Python Path:
>
> ['/home/benjamin/Ion/ellieharrison',
>  '/usr/lib/python2.6',
>  '/usr/lib/python2.6/plat-linux2',
>  '/usr/lib/python2.6/lib-tk',
>  '/usr/lib/python2.6/lib-old',
>  '/usr/lib/python2.6/lib-dynload',
>  '/usr/lib/python2.6/dist-packages',
>  '/usr/lib/python2.6/dist-packages/PIL',
>  '/home/benjamin/django-trunk',
>  '/usr/lib/python2.6/dist-packages/gst-0.10',
>  '/usr/lib/pymodules/python2.6',
>  '/usr/lib/python2.6/dist-packages/gtk-2.0',
>  '/usr/lib/pymodules/python2.6/gtk-2.0']
>
> Server time:    Tue, 15 Mar 2011 14:27:13 +0000
>
> I have this in the code:
> from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
>
> and the code is currently so:
> except ValidationError, e:
>                                 errormsg = e.message_dict[NON_FIELD_ERRORS]
>
>                                 form = EditPerson()
>                                 return render_to_response('personentry.html', 
> { 'form' : form,
> 'errormsg': errormsg  },context_instance=RequestContext(request))
>
> Here's the full traceback:
>
> Environment:
>
> Request Method: POST
> Request URL:http://localhost:8000/people/add/
>
> Django Version: 1.3 rc 1 SVN-15755
> Python Version: 2.6.6
> Installed Applications:
> ['django.contrib.auth',
>  'django.contrib.contenttypes',
>  'django.contrib.sessions',
>  'django.contrib.sites',
>  'django.contrib.messages',
>  'django.contrib.admin',
>  'trajectories']
> Installed Middleware:
> ('django.middleware.common.CommonMiddleware',
>  'django.contrib.sessions.middleware.SessionMiddleware',
>  'django.middleware.csrf.CsrfViewMiddleware',
>  'django.contrib.auth.middleware.AuthenticationMiddleware',
>  'django.contrib.messages.middleware.MessageMiddleware')
>
> Traceback:
> File "/home/benjamin/django-trunk/django/core/handlers/base.py" in
> get_response
>   111.                         response = callback(request,
> *callback_args, **callback_kwargs)
> File "/home/benjamin/django-trunk/django/contrib/auth/decorators.py"
> in _wrapped_view
>   23.                 return view_func(request, *args, **kwargs)
> File "/home/benjamin/Ion/ellieharrison/trajectories/views.py" in
> playeradd
>   298.                          errormsg = e.message_dict[NON_FIELD_ERRORS]
>
> Exception Type: AttributeError at /people/add/
> Exception Value: 'ValidationError' object has no attribute
> 'message_dict'

I forgot to add that I'm not doing any custom model validation as the
example in the documentation.

Here's the model in question:

class Person(models.Model):

        person_code = models.CharField(max_length=50, unique=True, db_column
= 'code')

        entered_by = models.ForeignKey(User, null=True,)

        is_private = models.NullBooleanField(default=False, null=True,
blank=True)

        entry_date = models.DateField(auto_now_add=True,)

        fname = models.CharField('first name', max_length=100)

        lname = models.CharField('last name', max_length=100)

        #gender = models.CharField('gender', max_length=4, blank=True,
choices=GENDER_CHOICES,)

        dob = models.DateField('date of birth')

        dobestm = models.NullBooleanField(default=False, null=True,
blank=True,)

        dobestd = models.NullBooleanField(default=False, null=True, blank =
True,)

        dobBC = models.NullBooleanField(default=False, null=True, blank =
True,)

        place_of_birth = models.CharField(max_length=100, blank=True,)

        dod = models.DateField('date of death',null=True, blank=True,)

        dodestm = models.NullBooleanField(default=False, null=True, blank =
True,)

        dodestd = models.NullBooleanField(default=False, null=True, blank =
True,)

        dodBC = models.NullBooleanField(default=False, null=True, blank =
True,)

        cause_of_death = models.CharField(max_length=100, blank=True,)



        #class Meta:

        #       db_table = 'trajectories_person'



        def __unicode__(self):

                return u'%s %s' % (self.fname, self.lname,)

-- 
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.

Reply via email to