From 41c30dd6135dccdd3d5ca06e08254193a048fd38 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 18 Mar 2015 13:13:04 +0100 Subject: [PATCH 1/2] Work around regression with model forms when a non-model form is passed to modelform_factory by the django.contrib.admin (refs #6766) --- src/authentic2/admin.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/authentic2/admin.py b/src/authentic2/admin.py index 35f3d62..adbe86f 100644 --- a/src/authentic2/admin.py +++ b/src/authentic2/admin.py @@ -7,16 +7,17 @@ from django.utils.translation import ugettext_lazy as _ from django.utils import timezone from django.utils.http import urlencode from django.http import HttpResponseRedirect from django.views.decorators.cache import never_cache from django.contrib.auth.admin import GroupAdmin, UserAdmin from django.contrib.auth.models import Group from django.contrib.sessions.models import Session from django.contrib.auth import REDIRECT_FIELD_NAME +from django.contrib.admin.utils import flatten_fieldsets from .nonce.models import Nonce from . import forms, models, admin_forms, compat, app_settings def cleanup_action(modeladmin, request, queryset): queryset.cleanup() cleanup_action.short_description = _('Cleanup expired objects') @@ -188,16 +189,30 @@ class AuthenticUserAdmin(UserAdmin): qs = models.Attribute.objects.filter(required=True) insertion_idx = 1 if qs.exists(): fieldsets = list(fieldsets) fieldsets.insert(insertion_idx, (_('Attributes'), {'fields': [at.name for at in qs]})) return fieldsets + def get_form(self, request, obj=None, **kwargs): + if 'fields' in kwargs: + fields = kwargs.pop('fields') + else: + fields = flatten_fieldsets(self.get_fieldsets(request, obj)) + if obj: + qs = models.Attribute.objects.all() + else: + qs = models.Attribute.objects.filter(required=True) + non_model_fields = [a.name for a in qs] + fields = list(set(fields) - set(non_model_fields)) + kwargs['fields'] = fields + return super(AuthenticUserAdmin, self).get_form(request, obj=obj, **kwargs) + User = compat.get_user_model() if User.__module__ == 'django.contrib.auth.models': if User in admin.site._registry: admin.site.unregister(User) admin.site.register(User, AuthenticUserAdmin) class AttributeAdmin(admin.ModelAdmin): list_display = ('label', 'name', 'kind', 'required', -- 1.9.1