#34061: Model validations should be run on save()
-------------------------------------+-------------------------------------
     Reporter:  Aaron Smith          |                    Owner:  nobody
         Type:  Uncategorized        |                   Status:  new
    Component:  Database layer       |                  Version:  4.0
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:  model, validation,   |             Triage Stage:
  validations                        |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by Aaron Smith:

Old description:

> Most modern Django applications, at least as far as I have seen in 6
> years of mostly working with Django, are headless API apps that do not
> use Forms. As a matter of fact, I have never used Forms in the several
> dozen django apps I've worked on, including several mission-critical APIs
> at multi-hundred-person companies.
>
> Not running validations by default is a **serious** footgun that has
> ruined more than one developer's day. Yes, it's in the documentation. But
> the broad expectation is that a web framework will do this sort of thing
> by default without extra configuration or overrides. Model validations
> should function as expected ''by the naive'' regardless of how the model
> is saved.
>
> Ideally the Model class should call `full_clean()` in it's save method.
> If this can't be done for backwards compatibility (which is a silly
> reason, but I digress) I propose we add a new `ValidatedModel` class that
> subclasses `Model`. There should be a clear and obvious option to fulfill
> the basic and reasonable expectations of the new Django developer.
>
> I'm more than happy to make this PR.

New description:

 Most modern Django applications, at least as far as I have seen in 6 years
 of mostly working with Django, are headless API apps that do not use
 Forms. As a matter of fact, I have never used Forms in the several dozen
 django apps I've worked on, including several mission-critical APIs at
 multi-hundred-person companies.

 Not running validations by default is a **serious** footgun that has
 ruined more than one developer's day. Yes, it's in the documentation. But
 the broad expectation is that a web framework will do this sort of thing
 by default without extra configuration or overrides. Model validations
 should function as expected ''by the naive'' regardless of how the model
 is saved.

 Ideally the Model class should call `full_clean()` in it's save method. If
 this can't be done for backwards compatibility, I propose we add a new
 `ValidatedModel` class that subclasses `Model`. There should be a clear
 and obvious option to fulfill the basic and reasonable expectations of the
 new Django developer.

 I'm more than happy to make this PR.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34061#comment:1>
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/0107018386e5e2ff-7136b2fd-630c-4d8d-9b90-6d952ffbfbf7-000000%40eu-central-1.amazonses.com.

Reply via email to