#22921: Model.clean_fields incorrectly skips validation for fields where null 
value
is not allowed
----------------------------------------------+----------------------------
     Reporter:  silveroff@…                   |      Owner:  nobody
         Type:  Cleanup/optimization          |     Status:  new
    Component:  Database layer (models, ORM)  |    Version:  master
     Severity:  Normal                        |   Keywords:  field
 Triage Stage:  Unreviewed                    |  validation, model
Easy pickings:  0                             |  Has patch:  0
                                              |      UI/UX:  0
----------------------------------------------+----------------------------
 I'm curious why does this method skips validation for a field with None
 value. As a side effect if field has null=False, skipping validation will
 result in DatabaseError saying that coulmn cannot be null. Why don't we
 check if None is a valid value for a field, taking into account current
 status of ``null`` option? This would save developers from nasty bugs and
 boilerplate in their model forms.

 {{{
 def clean_fields(self, exclude=None):
         """
         Cleans all fields and raises a ValidationError containing
 message_dict
         of all validation errors if any occur.
         """
         if exclude is None:
             exclude = []

         errors = {}
         for f in self._meta.fields:
             if f.name in exclude:
                 continue
             # Skip validation for empty fields with blank=True. The
 developer
             # is responsible for making sure they have a valid value.
             raw_value = getattr(self, f.attname)
             if f.blank and raw_value in f.empty_values:
                 continue
             try:
                 setattr(self, f.attname, f.clean(raw_value, self))
             except ValidationError as e:
                 errors[f.name] = e.error_list

         if errors:
             raise ValidationError(errors)
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/22921>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/062.33725f3fdf5038972f850e993a9ec91b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to