On Jan 9, 12:36 am, Honza Král <honza.k...@gmail.com> wrote: > On Fri, Jan 8, 2010 at 11:59 AM, koenb <koen.bierm...@werk.belgie.be> wrote: > > > On 8 jan, 10:03, James Bennett <ubernost...@gmail.com> wrote: > > >> Suppose I have a ModelForm and call save(commit=False) to get the > >> instance so I can do some more work on it. I'm basically saying to > >> Django "I don't think this object is ready to be saved yet, but I need > >> the object so I can do stuff to it". If Django goes ahead and does > >> implicit model validation there and raises an exception, it's just > >> telling me what I already knew: the object's not ready to be saved. > >> But now I get to do extra work to catch the exception, and that's bad > >> and wrong. > > >> Calling ModelForm.save(commit=False) should simply disable model > >> validation, period. If I want to validate the instance before saving > >> it, I'll validate the instance before saving it, but commit=False is > >> as clear a way as we have of saying "I'm not going to save this yet" > >> and model validation should respect that.
I agree with this completely. Calling ModelForm.save(commit=False) should disable model validation, period. We're explicitly telling Django not to save the model because it's not ready to be saved, therefore no model validation needs to be performed. > > The problem is that in the idiom the is_valid() call on the modelform > > tries to full_validate the instance, it is not in the save > > (commit=False) call. > > Yes This is what I think should be changed. ModelForm.is_valid() should only validate the form. Model validation errors should not be (and I believe are not currently) returned to the user as form errors, because they're not form errors and the user can't do anything about them. They're errors for the developer at the point when he or she is ready to save a model. Model validation should be moved out of ModelForm.is_valid() and into ModelForm.save(), but only if `commit=True`. Otherwise, model validation should be performed when explicitly requested. Cheers. Tai.
-- 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.