Login

Combine ProfileForm an UserForm in one.

Author:
sarg
Posted:
June 24, 2010
Language:
Python
Version:
Not specified
Score:
6 (after 7 ratings)

Using this method you can combine form for standart django.contrib.auth.models.User model and for your project profile model. As now, ProfileForm can be used as usual, and it will also contain UserForm fields.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class UserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email')

class ProfileForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        # magic 
        self.user = kwargs['instance'].user
        user_kwargs = kwargs.copy()
        user_kwargs['instance'] = self.user
        self.uf = UserForm(*args, **user_kwargs)
        # magic end 

        super(ProfileForm, self).__init__(*args, **kwargs)

        self.fields.update(self.uf.fields)
        self.initial.update(self.uf.initial)
         
        # define fields order if needed
        self.fields.keyOrder = (
            'last_name',
            'first_name',
            'second_name',

            'birthdate',
            'position',
            'contacts',

            'about',
        )

    def save(self, *args, **kwargs):
        # save both forms   
        self.uf.save(*args, **kwargs)
        return super(ProfileForm, self).save(*args, **kwargs)

    class Meta:
        model = Profile

More like this

  1. Stuff by NixonDash 1 month ago
  2. Add custom fields to the built-in Group model by jmoppel 3 months ago
  3. Month / Year SelectDateWidget based on django SelectDateWidget by pierreben 6 months, 2 weeks ago
  4. Python Django CRUD Example Tutorial by tuts_station 7 months ago
  5. Browser-native date input field by kytta 8 months, 2 weeks ago

Comments

Please login first before commenting.