In the end, *my* requirement is that I have *some place* to put
validation code that 1) can see the whole model instance, 2) will be run
from the admin interface, and 3) will return nice validation failures to
the user (not throw exceptions that will give the user a 500 error and
send me an email).

A) Is this an unreasonable pony? If so, why?
B) If not, how can I implement this such that it will get accepted?

I'd like to have it in for 1.2 if possible, as the model validation
interfaces are new. Once released, there will be more
backwards-compatibility guarantees to maintain.

On Mon, 2010-04-19 at 10:53 -0500, James Bennett wrote:
> On Mon, Apr 19, 2010 at 10:16 AM, Richard Laager <rlaa...@wiktel.com> wrote:
> > On Mon, 2010-04-19 at 07:55 -0700, orokusaki wrote:
> >> With all respect, you still haven't addressed my main concern: You
> >> told me that it was because of backward compatibility that this simple
> >> change couldn't be put in the trunk. It is backward compatible. If I'm
> >> wrong, it would suffice to have a simple explanation of what it
> >> breaks.
> >
> > I'd like to second this question. orokusaki suggested a couple of things
> > in ticket #13100, but I'm seconding specifically this comment:
> > http://code.djangoproject.com/ticket/13100#comment:8
> 
> The difference between how ModelForm works and how Model works is
> that, if you're overriding clean() on a ModelForm subclass, you don't
> automatically get uniqueness validation -- you have to call up to the
> parent clean(), or manually apply the uniqueness validation in your
> own clean().

Thank you for this explanation.

orokusaki noted in ticket #13100:
"The only difference between its implementation and
ModelForm?._post_clean() is the internal check it makes before running
validate_unique()."

So is the actual issue here that naively calling Model.full_clean() will
always run Model.validate_unique(), when the existing
ModelForm._post_clean() code only calls Model.validate_unique() when
self._validate_unique?

If so, Model.full_clean() is new in 1.2. So, could we just add a kwarg
like this (or similar)?
        def full_clean(self, exclude=None, validate_unique=True)

Then, it would be modified to only call Model.validate_unique if the
validate_unique argument was True.

Then, you could call Model.full_clean() from ModelForm._post_clean(),
passing self._validate_unique and preserve the same behavior.

Alternatively, could we add another function to Model that allows for
whole-model validation but does not call Model.validate_unique() and
then call that from ModelForm._post_clean() instead of calling
Model.full_clean()? Of course, Model.full_clean() would have to call
this new validation function as well.

Richard

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-develop...@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to