Как создать объект модели выбранного типа пользователя в форме регистрации

как создать объект модели выбранного типа пользователя в форме регистрации? что я хочу, если выбранный тип пользователя является студентом, то я хочу автоматически создать его в модели студента после регистрации, а не только в модели пользователя. как этого добиться?

enter image description here

models.py

class User(AbstractUser):
    is_admin = models.BooleanField('Is admin', default=False)
    is_teacher = models.BooleanField('Is teacher', default=False)
    is_student = models.BooleanField('Is student', default=False)

class Student(models.Model):

    GENDER = (
        ('1', 'Male'),
        ('2', 'Female')
    )

    STATUS = (
        ('1', 'Ongoing'),
        ('2', 'On Probition'),
        ('3', 'NA')
    )

    name = models.OneToOneField(
        User, on_delete=models.CASCADE, primary_key=True)
    id_number = models.IntegerField()
    gender = models.CharField(
        max_length=10, choices=GENDER, blank=True, null=True)
    date_of_birth = models.CharField(max_length=20, blank=True, null=True)
    course = models.ForeignKey(
        Course, on_delete=models.CASCADE, blank=True, null=True)
    year_level = models.IntegerField()
    status = models.CharField(max_length=10, choices=STATUS, default='3')

    def __str__(self):
        return str(self.name)


class Teacher(models.Model):
    name = models.OneToOneField(
        User, on_delete=models.CASCADE, primary_key=True)

    def __str__(self):
        return str(self.name)

forms.py

class SignUpForm(UserCreationForm):
    username = forms.CharField(
        widget=forms.TextInput(
            attrs={
                "class": "form-control"
            }
        )
    )
    password1 = forms.CharField(
        widget=forms.PasswordInput(
            attrs={
                "class": "form-control"
            }
        )
    )
    password2 = forms.CharField(
        widget=forms.PasswordInput(
            attrs={
                "class": "form-control"
            }
        )
    )
    email = forms.CharField(
        widget=forms.TextInput(
            attrs={
                "class": "form-control"
            }
        )
    )

    class Meta:
        model = User
        # model = Profile
        fields = ('username', 'email', 'password1', 'password2',
                  'is_admin', 'is_teacher', 'is_student')

Я думаю, что логика должна быть добавлена здесь в views.py, но я не знаю, как это сделать.

views.py

def register(request):
    msg = None
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            msg = 'user created'
            return redirect('login_view')
        else:
            msg = 'form is not valid'
    else:
        form = SignUpForm()
    return render(request, 'register/register.html', {'form': form, 'msg': msg})
Вернуться на верх