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.