Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 7354)
+++ django/contrib/admin/options.py	(working copy)
@@ -1,7 +1,8 @@
 from django import oldforms, template
 from django import newforms as forms
 from django.newforms.formsets import all_valid
-from django.newforms.models import _modelform_factory, _inlineformset_factory
+from django.newforms.models import _modelform_factory, _inlineformset_factory,\
+        BaseModelForm
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.admin import widgets
 from django.contrib.admin.util import get_deleted_objects
@@ -212,6 +213,7 @@
     save_on_top = False
     ordering = None
     inlines = []
+    admin_form = BaseModelForm
 
     def __init__(self, model, admin_site):
         self.model = model
@@ -318,7 +320,8 @@
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
-        return _modelform_factory(self.model, fields=fields, formfield_callback=self.formfield_for_dbfield)
+        return _modelform_factory(self.model, form=self.admin_form,
+                fields=fields, formfield_callback=self.formfield_for_dbfield)
 
     def get_formsets(self, request, obj=None):
         for inline in self.inline_instances:
Index: django/newforms/models.py
===================================================================
--- django/newforms/models.py	(revision 7354)
+++ django/newforms/models.py	(working copy)
@@ -217,7 +217,7 @@
     def __new__(cls, name, bases, attrs,
                 formfield_callback=lambda f: f.formfield()):
         try:
-            parents = [b for b in bases if issubclass(b, ModelForm)]
+            parents = [b for b in bases if issubclass(b, BaseModelForm)]
         except NameError:
             # We are defining ModelForm itself.
             parents = None
@@ -277,7 +277,7 @@
     __metaclass__ = ModelFormMetaclass
 
 # XXX: This API *will* change. Use at your own risk.
-def _modelform_factory(model, form=BaseForm, fields=None, exclude=None,
+def _modelform_factory(model, form=BaseModelForm, fields=None, exclude=None,
                        formfield_callback=lambda f: f.formfield()):
     # HACK: we should be able to construct a ModelForm without creating
     # and passing in a temporary inner class
@@ -287,7 +287,7 @@
     setattr(Meta, 'fields', fields)
     setattr(Meta, 'exclude', exclude)
     class_name = model.__name__ + 'Form'
-    return ModelFormMetaclass(class_name, (ModelForm,), {'Meta': Meta},
+    return ModelFormMetaclass(class_name, (form,), {'Meta': Meta},
                               formfield_callback=formfield_callback)
 
 
