Сбой ограничения UNIQUE: auth_user.username при создании пользователя с помощью разработанной формы

Я новичок в django и работаю над логином студента для экзаменационного портала. Я в основном передаю две формы в моем представлении. Одна форма предназначена для получения данных пользователя, а вторая - для хранения данных студента. Я использовал пакет django widget tweak для загрузки полей моих форм. Мой пользователь создается, но в то же время я получаю ошибку - UNIQUE constraint failed: auth_user.username.

Вот мой model.py

class StudentInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    mobile = models.IntegerField(max_length=20, blank=True)
    branch = models.CharField(max_length=50, blank=True)

forms.py

class StudentForm(forms.ModelForm)
    class Meta():
        model = User
        fields = ['username', 'email', 'password']
        widgets = {
        'password': forms.PasswordInput()
        }

class StudentInfoForm(forms.ModelForm):
    class Meta():
        model = StudentInfo
        fields = ['mobile','branch']

views.py

def register(request):
    userForm= forms.StudentForm()
    studentForm=forms.StudentInfoForm()
    mydict={'userForm':userForm,'studentForm':studentForm}
    if request.method=='POST':
        userForm=forms.StudentForm(request.POST)
        studentForm=forms.StudentInfoForm(request.POST)
        if userForm.is_valid() and studentForm.is_valid():
            user=userForm.save()
            user.is_active = True
            user.set_password(user.password)
            messages.success(request,"Student User created Succesfully.")

            student=studentForm.save(commit=False)
            student.user=user
            student.save()
            
            my_student_group = Group.objects.get_or_create(name='STUDENT')
            my_student_group[0].user_set.add(user)
            return redirect('login')
        
    return render(request,'student_signup.html',context=mydict)

html файл

{% load widget_tweaks %}
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">

    <title>Student Signup</title>
  </head>
  <body>
    <h1 style="text-align: center; margin-top: 5px;">Student Signup</h1>
    <div class="container mt-5" style="width: 50%;">

    <form method="post">
        {% csrf_token %}
        <div class="mb-3">
          <label for="username" class="form-label">Username</label>
          {
          {% render_field userForm.username type="text" class="form-control" %}

          
        </div>
        <div class="mb-3">
          <label for="password" class="form-label">Password</label>
          
          {% render_field userForm.password type="password" class="form-control" %}

        </div>

        <div class="mb-3">
            <label for="email" class="form-label">Email</label>
            
            {% render_field userForm.email type="email" class="form-control" %}
  
        </div>
        <div class="mb-3">
            <label for="branch" class="form-label">Branch</label>
            
            {% render_field studentForm.branch type="text" class="form-control" %}
  
        </div>

        <div class="mb-3">
            <label for="mobile" class="form-label">Mobile</label>
             
            {% render_field studentForm.mobile type="number" class="form-control" %}
  
        </div>


        
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>

</div>

    
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

    
  </body>
</html>

Я искал в интернете и нашел, что это происходит, когда мы сохраняем форму дважды, но я не думаю, что я делаю это. Я вызываю метод сохранения только один раз.

Я думаю, что это происходит потому, что ваш экземпляр пользователя привязан к форме, а не к экземпляру модели, который вы затем присваиваете своему экземпляру студента

Попробуйте так:

def register(request):
    userForm= forms.StudentForm()
    studentForm=forms.StudentInfoForm()
    mydict={'userForm':userForm,'studentForm':studentForm}
    if request.method=='POST':
        userForm=forms.StudentForm(request.POST)
        studentForm=forms.StudentInfoForm(request.POST)
        if userForm.is_valid() and studentForm.is_valid():
            user=userForm.save()
            user.is_active = True
            user.set_password(user.password)
            messages.success(request,"Student User created Succesfully.")

            student=studentForm.save(commit=False)
            student.user=user.instance  # user is bound to the form instance not the model instance
            student.save()
            
            my_student_group = Group.objects.get_or_create(name='STUDENT')
            my_student_group[0].user_set.add(user)
            return redirect('login')
    return render(request,'student_signup.html',context=mydict)
Вернуться на верх