회원가입 시 one-to-one 모델을 통해 확장했는데 확장한 곳 db에 데이터가 저장되지 않습니다.

안녕하세요, 이하는 저의 소스코드입니다.

모델

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.CharField(max_length=100)


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

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

def register(request):
    if request.method == 'POST':
        user_form = UserForm(request.POST)
        profile_form = ProfileForm(request.POST)
        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.user.set_password(user_form.cleaned_data['password'])
                        profile.department = request.POST['department']
            user.save()
            print(request)
            return render(request, 'index.html', {'new_user':user})
    else:
        user_form = UserForm()
        profile_form = ProfileForm()

        return render(request, 'register.html', {'form':user_form})

class UserForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat Password', widget=forms.PasswordInput)

class Meta:
    model = User
    fields = ['username', 'email']

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['department']
urls.py

urlpatterns = [
     path('',
     IndexView.as_view(),
     name='index'),
 path('register/', views.register, 
      name='register'),
 ....

템플릿

{% extends "base.html" %}
<div class="container my-3">
<form method="post" action="">
    {% csrf_token %}
    <div class="mb-3">
        <label for="username">ID</label>
        <input type="text" class="form-control" name="username" id="username"
               value="{{ form.username.value|default_if_none:'' }}">
    </div>
    <div class="mb-3">
        <label for="password">PASSWORD</label>
        <input type="password" class="form-control" name="password" id="password"
               value="{{ form.password.value|default_if_none:'' }}">
    </div>
    <div class="mb-3">
        <label for="password2">PASSWORD_CONFIRM</label>
        <input type="password" class="form-control" name="password2" id="password2"
               value="{{ form.password2.value|default_if_none:'' }}">
    </div>
    <div class="mb-3">
        <label for="email">EMAIL</label>
        <input type="text" class="form-control" name="email" id="email"
               value="{{ form.email.value|default_if_none:'' }}">
    </div>
    <div class="mb-3">
        <label for="email">DEPARTMENT</label>
        <input type="text" class="form-control" name="department" id="department"
               value="{{ form.department.value|default_if_none:'' }}">
    </div>
    <button type="submit" class="btn">REGISTER!(SIGN UP!)</button>
    </form>
</div>

이렇게 했을떄 회원가입은 잘 되고 기본 auth_user 테이블에도 데이터는 잘 들어옵니다만,
정작 Profile db에 department 속성이 저장이 되지 않습니다.
뷰에서 profile.department 값을 콘솔에 찍어보면 입력한 값은 잘 나오는데 왜 저장이 안될까요?
그렇다고 user.save()를 한 뒤에 profile.save()를 하면
django.db.utils.IntegrityError: duplicate key value violates unique constraint "profile_user_id_key"
이런 기본키 중복 오류같은게 납니다 ㅠ
도와주세요..

열공 186

M 2023년 2월 8일 9:27 오전

목록으로