Projet

Général

Profil

0001-forms-if-not-form-class-is-given-to-modelform_factor.patch

Benjamin Dauvergne, 27 mai 2015 20:05

Télécharger (2,67 ko)

Voir les différences:

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(-)
src/authentic2/forms.py
76 76
            self.save_m2m = save_m2m
77 77
        return result
78 78

  
79

  
79 80
def modelform_factory(model, **kwargs):
80 81
    '''Build a modelform for the given model,
81 82

  
82 83
       For the user model also add attribute based fields.
83 84
    '''
84
    form = kwargs.pop('form', None) or forms.ModelForm
85
    form = kwargs.pop('form', None)
85 86
    fields = kwargs.get('fields', [])
86 87
    required = list(kwargs.pop('required', []))
87 88
    d = {}
88
    if not form or not hasattr(form, 'Meta'):
89
        meta_d = {'model': model, 'fields': '__all__'}
90
        meta = type('Meta', (), meta_d)
91
        d['Meta'] = meta
92
    bases = (form,)
93 89
    # KV attributes are only supported for the user model currently
94 90
    modelform = None
95 91
    if model == get_user_model():
96
        if form:
97
            bases = (form,)
98
        else:
99
            bases = (BaseUserForm,)
92
        if not form:
93
            form = BaseUserForm
100 94
        attributes = models.Attribute.objects.all()
101 95
        for attribute in attributes:
102 96
            if fields and attribute.name not in fields:
......
105 99
        for field in app_settings.A2_REQUIRED_FIELDS:
106 100
            if not field in required:
107 101
                required.append(field)
102
    if not form or not hasattr(form, 'Meta'):
103
        meta_d = {'model': model, 'fields': '__all__'}
104
        meta = type('Meta', (), meta_d)
105
        d['Meta'] = meta
106
    if not form:  # fallback
107
        form = forms.ModelForm
108 108
    modelform = None
109 109
    if required:
110 110
        def __init__(self, *args, **kwargs):
111 111
            super(modelform, self).__init__(*args, **kwargs)
112 112
            for field in required:
113 113
                if field in self.fields:
114
		    self.fields[field].required = True
114
                    self.fields[field].required = True
115 115
        d['__init__'] = __init__
116
    modelform = type(model.__name__ + 'ModelForm', bases, d)
116
    modelform = type(model.__name__ + 'ModelForm', (form,), d)
117 117
    kwargs['form'] = modelform
118 118
    return django_modelform_factory(model, **kwargs)
119
-