Index: django/contrib/admin/validation.py
===================================================================
--- django/contrib/admin/validation.py	(revision 7939)
+++ django/contrib/admin/validation.py	(working copy)
@@ -244,7 +244,15 @@
 
 def _check_field_exists(cls, model, opts, label, field):
     try:
-        return opts.get_field(field)
+        # Check to see if a custom form is being used and has the declared field
+        if hasattr(cls.form, 'base_fields'):
+            return cls.form.base_fields[field]
+        else:
+            return opts.get_field(field)
+    except KeyError:
+        raise ImproperlyConfigured("`%s.%s` refers to "
+                "field `%s` that is missing from the form `%s`."
+                % (cls.__name__, label, field, cls.form.__name__))
     except models.FieldDoesNotExist:
         raise ImproperlyConfigured("`%s.%s` refers to "
                 "field `%s` that is missing from model `%s`."
Index: tests/regressiontests/modeladmin/models.py
===================================================================
--- tests/regressiontests/modeladmin/models.py	(revision 7929)
+++ tests/regressiontests/modeladmin/models.py	(working copy)
@@ -262,6 +262,41 @@
 >>> site = AdminSite()
 >>> site.register(ValidationTestModel, ValidationTestModelAdmin)
 
+
+# Check custom admin forms can validate - using the previous example of the AdminBandForm
+>>> class AdminBandForm(forms.ModelForm):
+...     delete = forms.BooleanField()
+...     
+...     class Meta:
+...         model = Band
+
+>>> class BandAdmin(ModelAdmin):
+...     form = AdminBandForm
+...
+...     fieldsets = (
+...         ('Band', {
+...             'fields' : ('name', 'bio', 'sign_date', 'delete')
+...         }),
+...     )
+
+>>> validate(BandAdmin, Band)
+
+
+# Ensure it catches invalid form fields - deleted has not be declared
+>>> class BandAdmin(ModelAdmin):
+...     form = AdminBandForm
+...
+...     fieldsets = (
+...         ('Band', {
+...             'fields' : ('name', 'bio', 'sign_date', 'deleted')
+...         }),
+...     )
+
+>>> validate(BandAdmin, Band)
+Traceback (most recent call last):
+...
+ImproperlyConfigured: `BandAdmin.fieldsets[0][1]['fields']` refers to field `deleted` that is missing from the form `AdminBandForm`.
+
 # raw_id_fields
 
 >>> class ValidationTestModelAdmin(ModelAdmin):
