황준필
황준필

Reputation: 135

Django User Profile Model Sign Up Form

I'm developing django project.

Now I'm making sign up form with profile model.

But I got a problem.

models.py :

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    usernickname = models.CharField(db_column='userNickName', max_length=50, blank=True, null=True)
    userbirth = models.DateField(db_column='userBirth', blank=True, null=True)  

    class Meta:
        managed = False
        db_table = 'profile'

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    print(instance)
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

forms.py :

from django import forms
from django.contrib.auth.models import User

class UserForm(forms.ModelForm):
    userBirth = forms.DateField()

    class Meta:
        model = User
        fields = ('username', 'password', 'userBirth')
        widgets = {
            'username': forms.TextInput(),
            'password': forms.PasswordInput(),
            'userBirth': forms.DateField(),
        }

views.py :

def join(request):
    if request.method == "POST":
        userForm = UserForm(request.POST, prefix='user')
        profileForm = ProfileForm(request.POST, prefix='profile')
        if userForm.is_valid() * profileForm.is_valid():
            user = userForm.save()
            profile = profileForm.save(commit=False)
            profile.user = user
            profile.save()

            return redirect('index')
    else:
        userForm = UserForm()
        profileForm = ProfileForm()
    return render_to_response('registration/join.html',dict(userform=userForm,
                                                profileform=profileForm))

and when sign up,

InternalError at /join/ (1054, "Unknown column 'profile.user_id' in 'field list'")

this error returns.

when log in to /admin, same error returns. I don't have any idea..

I refernced this blog:

https://simpleisbetterthancomplex.com/tutorial/2017/02/18/how-to-create-user-sign-up-view.html#sign-up-with-profile-model

Upvotes: 0

Views: 1635

Answers (2)

NAMA Coconut
NAMA Coconut

Reputation: 1

in your forms.py in profile form I think you need to add 'user' field .

Upvotes: 0

Dmitry Gavrilenko
Dmitry Gavrilenko

Reputation: 56

If you already have model profile - then add

db_column=${USER ID DB COLUMN NAME} on user field,

if no - set managed = True in Meta.

Also, you can use related_name='profile' to get profile instance from user.

Django tries to accept profile instance by user_id column, but can't identify it.

Upvotes: 1

Related Questions