diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -177,6 +177,14 @@
             return self.fieldsets
         elif self.fields:
             return [(None, {'fields': self.fields})]
+        elif getattr(getattr(self.form, '_meta', None), 'fieldsets', None):
+            fieldsets = []
+            for name, options in self.form._meta.fieldsets:
+                legend = options.get('legend')
+                fields = [field for field in options['fields'] if field in self.form.base_fields]
+                if fields:
+                    fieldsets.append((legend, {'fields': fields}))
+            return fieldsets
         return None
     declared_fieldsets = property(_declared_fieldsets)
 
