Search code examples
djangoformsuser-profile

Setting inital form data


Below I paste snippet of user's profile edition view, I think it isn't necessary to paste all view here. I want to set initial data, when user want to edit his profile he should see data which is actually stored in database.

form = UserProfileForm(initial={'first_name': user.userprofile.first_name,
                                    'last_name': user.userprofile.last_name,
                                    'nickname': user.userprofile.nickname,
                                    'bio': user.userprofile.bio,
                                    'location': user.userprofile.location,
                                    'gender': user.userprofile.gender,
                                    'birth_date': user.userprofile.birth_date})

I've created above code and it works fine, but I think it isn't pythonic at all, so my request is about how can I write it better?


Solution

  • Rather than using initial data, you should pass the userprofile itself as the instance parameter:

    form = UserProfileForm(instance=user.userprofile)
    

    assuming that UserProfileForm is a ModelForm, which it should be.