From cdb562256435cc885d9637a7c538f546d4094a44 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 27 May 2015 20:02:30 +0200 Subject: [PATCH] forms: if not form class is given to modelform_factory() on User model, user BaseUserForm (fixes #7391) Building of the base classe tuple has been refactoed. Bug introduced in 7141a96e6 --- src/authentic2/forms.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/authentic2/forms.py b/src/authentic2/forms.py index f211822..44032c2 100644 --- a/src/authentic2/forms.py +++ b/src/authentic2/forms.py @@ -76,27 +76,21 @@ class BaseUserForm(forms.ModelForm): self.save_m2m = save_m2m return result + def modelform_factory(model, **kwargs): '''Build a modelform for the given model, For the user model also add attribute based fields. ''' - form = kwargs.pop('form', None) or forms.ModelForm + form = kwargs.pop('form', None) fields = kwargs.get('fields', []) required = list(kwargs.pop('required', [])) d = {} - if not form or not hasattr(form, 'Meta'): - meta_d = {'model': model, 'fields': '__all__'} - meta = type('Meta', (), meta_d) - d['Meta'] = meta - bases = (form,) # KV attributes are only supported for the user model currently modelform = None if model == get_user_model(): - if form: - bases = (form,) - else: - bases = (BaseUserForm,) + if not form: + form = BaseUserForm attributes = models.Attribute.objects.all() for attribute in attributes: if fields and attribute.name not in fields: @@ -105,14 +99,20 @@ def modelform_factory(model, **kwargs): for field in app_settings.A2_REQUIRED_FIELDS: if not field in required: required.append(field) + if not form or not hasattr(form, 'Meta'): + meta_d = {'model': model, 'fields': '__all__'} + meta = type('Meta', (), meta_d) + d['Meta'] = meta + if not form: # fallback + form = forms.ModelForm modelform = None if required: def __init__(self, *args, **kwargs): super(modelform, self).__init__(*args, **kwargs) for field in required: if field in self.fields: - self.fields[field].required = True + self.fields[field].required = True d['__init__'] = __init__ - modelform = type(model.__name__ + 'ModelForm', bases, d) + modelform = type(model.__name__ + 'ModelForm', (form,), d) kwargs['form'] = modelform return django_modelform_factory(model, **kwargs) -- 2.1.4