Author: jkocherhans
Date: 2007-09-11 20:34:25 -0500 (Tue, 11 Sep 2007)
New Revision: 6102

Modified:
   django/branches/newforms-admin/django/contrib/admin/options.py
Log:
newforms-admin: Fixed #5383.


Modified: django/branches/newforms-admin/django/contrib/admin/options.py
===================================================================
--- django/branches/newforms-admin/django/contrib/admin/options.py      
2007-09-12 01:30:50 UTC (rev 6101)
+++ django/branches/newforms-admin/django/contrib/admin/options.py      
2007-09-12 01:34:25 UTC (rev 6102)
@@ -179,22 +179,21 @@
         # For any other type of field, just call its formfield() method.
         return db_field.formfield(**kwargs)
 
-    def _fieldsets(self, request):
+    def _declared_fieldsets(self):
         if self.fieldsets:
             return self.fieldsets
-        if self.fields:
+        elif self.fields:
             return [(None, {'fields': self.fields})]
-        # TODO: switch this to pull from the form, not the model
-        fields = [f.name for f in self.opts.fields + self.opts.many_to_many if 
f.editable and not isinstance(f, models.AutoField)]
-        return [(None, {'fields': fields})]
+        return None
+    declared_fieldsets = property(_declared_fieldsets)
 
     def fieldsets_add(self, request):
         "Hook for specifying fieldsets for the add form."
-        return list(self._fieldsets(request))
-
+        raise NotImplementedError
+    
     def fieldsets_change(self, request, obj):
         "Hook for specifying fieldsets for the change form."
-        return list(self._fieldsets(request))
+        raise NotImplementedError
 
 class ModelAdmin(BaseModelAdmin):
     "Encapsulates all admin options and functionality for a given model."
@@ -309,18 +308,38 @@
         """
         return self.queryset(request)
 
+    def fieldsets_add(self, request):
+        "Hook for specifying fieldsets for the add form."
+        if self.declared_fieldsets:
+            return self.declared_fieldsets
+        form = self.form_add(request)
+        return [(None, {'fields': form.base_fields.keys()})]
+
+    def fieldsets_change(self, request, obj):
+        "Hook for specifying fieldsets for the change form."
+        if self.declared_fieldsets:
+            return self.declared_fieldsets
+        form = self.form_change(request, obj)
+        return [(None, {'fields': form.base_fields.keys()})]
+
     def form_add(self, request):
         """
         Returns a Form class for use in the admin add view.
         """
-        fields = flatten_fieldsets(self.fieldsets_add(request))
+        if self.declared_fieldsets:
+            fields = flatten_fieldsets(self.declared_fieldsets)
+        else:
+            fields = None
         return forms.form_for_model(self.model, fields=fields, 
formfield_callback=self.formfield_for_dbfield)
 
     def form_change(self, request, obj):
         """
         Returns a Form class for use in the admin change view.
         """
-        fields = flatten_fieldsets(self.fieldsets_change(request, obj))
+        if self.declared_fieldsets:
+            fields = flatten_fieldsets(self.declared_fieldsets)
+        else:
+            fields = None
         return forms.form_for_instance(obj, fields=fields, 
formfield_callback=self.formfield_for_dbfield)
 
     def save_add(self, request, model, form, formsets, post_url_continue):
@@ -678,22 +697,32 @@
 
     def formset_add(self, request):
         """Returns an InlineFormSet class for use in admin add views."""
-        fields = flatten_fieldsets(self.fieldsets_add(request))
+        if self.declared_fieldsets:
+            fields = flatten_fieldsets(self.declared_fieldsets)
+        else:
+            fields = None
         return forms.inline_formset(self.parent_model, self.model, 
fk_name=self.fk_name, fields=fields, 
formfield_callback=self.formfield_for_dbfield, extra=self.extra)
 
     def formset_change(self, request, obj):
         """Returns an InlineFormSet class for use in admin change views."""
-        fields = flatten_fieldsets(self.fieldsets_change(request, obj))
+        if self.declared_fieldsets:
+            fields = flatten_fieldsets(self.declared_fieldsets)
+        else:
+            fields = None
         return forms.inline_formset(self.parent_model, self.model, 
fk_name=self.fk_name, fields=fields, 
formfield_callback=self.formfield_for_dbfield, extra=self.extra)
 
-    def _fieldsets(self, request):
-        if self.fieldsets:
-            return self.fieldsets
-        if self.fields:
-            return [(None, {'fields': self.fields})]
-        fields = [f for f in 
self.formset_class(request).form_class.base_fields.keys()]
-        return [(None, {'fields': fields})]
+    def fieldsets_add(self, request):
+        if self.declared_fieldsets:
+            return self.declared_fieldsets
+        form = self.formset_add(request).form_class
+        return [(None, {'fields': form.base_fields.keys()})]
 
+    def fieldsets_change(self, request, obj):
+        if self.declared_fieldsets:
+            return self.declared_fieldsets
+        form = self.formset_change(request, obj).form_class
+        return [(None, {'fields': form.base_fields.keys()})]
+
 class StackedInline(InlineModelAdmin):
     template = 'admin/edit_inline_stacked.html'
 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to