On 04/29/2011 10:02 AM, Yishai Beeri wrote: > Of course, cleanup need not be simplistic. In fact, I think the common > coder would never expect a CM to actually save an object on __exit__ - > and will be surprised by the proposed behavior.
Could be - the name "finish()" was intended to give the impression that the purpose of the CM was to wrap up everything the modelform needs to do. That currently includes saving the object. I'm open to the idea that we change the name of the CM to "form.validate()" and it never saves the object; you have to call obj.save() yourself. In a way, it feels like making users of the API do extra work for no good reason, and opening the door to mis-use of the API (since all changes to the object should be completed within the body of the context manager), but perhaps this is worth it to avoid unexpected behavior. For reference, here's where we'd be in that case (I still prefer the context manager over the idea of two separate calls to something named "validate"): def my_view(request): form = MyModelForm(request.POST or None) try: with form.validate(tweak=True) as obj: obj.user = request.user except ValidationError: pass else: obj.save() return redirect(obj) return render(request, "foo.html", {"form": form}) Or in the simple case, where no modifications to the object are needed: def my_view(request): form = MyModelForm(request.POST or None) try: obj = form.validate() except ValidationError: pass else: obj.save() return redirect(obj) return render(request, "foo.html", {"form": form}) Carl -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@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.