Skip to content Skip to sidebar Skip to footer

In Django How Can I Create A User And A User Profile At The Same Time From A Single Form Submission

I am using extended version of the UserCreationForm to add users via my own template, which is working well. I would also like to include, as part of the same form template, a cust

Solution 1:

First, add exclude = ('user',) to the Meta class for ProfileForm. Then, in your view:

user_valid = uform.is_valid()
profile_valid = pform.is_valid()
if user_valid and profile_valid:
    user = uform.save()
    profile = pform.save(commit=False)
    profile.user = user
    profile.save()

Although it occurs to me that since you only have one field on the profile form, an easier way to do it is to forget that form completely, and just add the field to the user form:

class UserCreationFormExtended(UserCreationForm): 
    level = forms.ChoiceField(choices=LEVEL, max_length=20)
    ... etc...

if uform.is_valid():
    user = uform.save()
    profile = Profile.objects.create(user=user, level=uform.cleaned_data['level']))

Solution 2:

There's a similar solution I found here: http://sontek.net/blog/detail/extending-the-django-user-model

Basically you just extend the default form UserCreationForm but keeping the same name. By doing it like this you dont have to add any new views or anything like that, it works seamlessly with the way Django's docs tell you to do UserProfiles.

Frankly, I don't understand why they explain how to add the fields to the admin page, and then don't tell you how to actually use those fields anywhere.


Post a Comment for "In Django How Can I Create A User And A User Profile At The Same Time From A Single Form Submission"