Index: django/views/generic/create_update.py
===================================================================
--- django/views/generic/create_update.py	(revision 4664)
+++ django/views/generic/create_update.py	(working copy)
@@ -1,6 +1,6 @@
 from django.core.xheaders import populate_xheaders
 from django.template import loader
-from django import oldforms
+from django import newforms as forms
 from django.db.models import FileField
 from django.contrib.auth.views import redirect_to_login
 from django.template import RequestContext
@@ -23,7 +23,7 @@
     if login_required and not request.user.is_authenticated():
         return redirect_to_login(request.path)
 
-    manipulator = model.AddManipulator(follow=follow)
+    ModelForm=forms.models.form_from_model(model)
     if request.POST:
         # If data was POSTed, we're trying to create a new object
         new_data = request.POST.copy()
@@ -31,13 +31,12 @@
         if model._meta.has_field_type(FileField):
             new_data.update(request.FILES)
 
-        # Check for errors
-        errors = manipulator.get_validation_errors(new_data)
-        manipulator.do_html2python(new_data)
+        # Actually read the data
+        form=ModelForm(new_data)
 
-        if not errors:
+        if not form.errors:
             # No errors -- this means we can save the data!
-            new_object = manipulator.save(new_data)
+            new_object = form.save()
 
             if request.user.is_authenticated():
                 request.user.message_set.create(message=gettext("The %(verbose_name)s was created successfully.") % {"verbose_name": model._meta.verbose_name})
@@ -53,10 +52,9 @@
     else:
         # No POST, so we want a brand new form without any data or errors
         errors = {}
-        new_data = manipulator.flatten_data()
+        form=ModelForm()
 
-    # Create the FormWrapper, template, context, response
-    form = oldforms.FormWrapper(manipulator, new_data, errors)
+    # Create the template, context, response
     if not template_name:
         template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
@@ -102,16 +100,15 @@
     except ObjectDoesNotExist:
         raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs)
 
-    manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.attname), follow=follow)
+    ModelForm = forms.models.form_for_instance(object)
 
     if request.POST:
         new_data = request.POST.copy()
         if model._meta.has_field_type(FileField):
             new_data.update(request.FILES)
-        errors = manipulator.get_validation_errors(new_data)
-        manipulator.do_html2python(new_data)
-        if not errors:
-            object = manipulator.save(new_data)
+        form=ModelForm(new_data)
+        if not form.errors:
+            object = form.save(new_data)
 
             if request.user.is_authenticated():
                 request.user.message_set.create(message=gettext("The %(verbose_name)s was updated successfully.") % {"verbose_name": model._meta.verbose_name})
@@ -126,9 +123,8 @@
     else:
         errors = {}
         # This makes sure the form acurate represents the fields of the place.
-        new_data = manipulator.flatten_data()
+        form = ModelForm()
 
-    form = oldforms.FormWrapper(manipulator, new_data, errors)
     if not template_name:
         template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
