Usually you would have separated ModelForm child for your User and Profiles:
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
fields = ('username', 'email', 'password')
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ('website', 'picture')
At the the time of saving you are just passing the data to initialize your ModelForms.
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
To show form you need to pass these forms to template:
user_form = UserForm()
profile_form = UserProfileForm()
To show at template just call as_p of your ModelForm:
{{ user_form.as_p }}
{{ profile_form.as_p }}
I think this is the easiest way to do so....