In Django How Can I Create A User And A User Profile At The Same Time From A Single Form Submission
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"