Work around regression with model forms when a non-model form is passed to modelform_factory by the django.contrib.admin (refs #6766)

This commit is contained in:
Benjamin Dauvergne 2015-03-18 13:13:04 +01:00
parent bd6c954064
commit d20a7cc1bc
1 changed files with 15 additions and 0 deletions

View File

@ -11,6 +11,7 @@ from django.views.decorators.cache import never_cache
from django.contrib.auth.admin import UserAdmin
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
@ -192,6 +193,20 @@ class AuthenticUserAdmin(UserAdmin):
(_('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: