Reputation: 135
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:
Upvotes: 0
Views: 1635
Reputation: 1
in your forms.py in profile form I think you need to add 'user' field .
Upvotes: 0
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