Почему мне не удалось сохранить профиль ученика в базе данных - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в django и пытаюсь расширить настраиваемого пользователя до нескольких профилей пользователей, и когда я пытаюсь сохранить пользователя, он говорит: «Студент с этой группой уже существует». Первый пользователь зарегистрировался нормально, но когда я создаю второго, возникает ошибка

, даже если модель пользователя не имеет членства в группе, вот мой код

models.py

class CustomUser(AbstractUser):
    USER_TYPE_CHOICES = (
      (1, 'student'),
      (2, 'parent'),
      (3, 'gard'),
      (4, 'teacher'),
      (5, 'secretary'),
      (6, 'supervisor'),
      (7, 'admin'),
    )
    is_active = models.BooleanField(default=True)
    user_type =models.PositiveSmallIntegerField(choices=USER_TYPE_CHOICES,null=True)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='student_profile')
    group = models.OneToOneField(Group,related_name='student_group',on_delete=models.CASCADE,null=True)
    teacher = models.ManyToManyField(Teacher,related_name="student_teacher")

    def save(self,*args,**kwargs):
        self.user.is_active = False
        return super(Student,self).save(*args,**kwargs)


class Group(models.Model):
    name = models.CharField(max_length=255, unique=True)
    slug = models.SlugField(allow_unicode=True, unique=True)

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        retuen super().save(*args, **kwargs)  


Это мой файл forms.py

views.py


def student_signUpView(request,**kwargs):
    registered = False
    if request.method == 'POST':
        user_form = UserSignUpForm(request.POST)
        profile_form = StudentSignUpForm(request.POST)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save(commit=False)
            user.set_password(user_form.cleaned_data['password2'])
            print(user.user_type)
            user.save()
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.exist = True
            profile.save()
            registered = True
        else:
            print(user_form.errors,profile_form.errors)
    else:
        user_form = UserSignUpForm()
        profile_form = StudentSignUpForm()
    return render(request, 'accounts/singup.html',{
            'registered':registered,
            'user_form': user_form,
            'profile_form': profile_form,
            })

и вот ошибка

<ul class="errorlist"><li>user_type<ul class="errorlist"><li>This field is required.</li></ul></li></ul> <ul class="errorlist"><li>group<ul class="errorlist"><li>Student with this Group already exists.</li></ul></li></ul>
[06/Aug/2020 18:52:39] "POST /accounts/signup/Student/ HTTP/1.1" 200 7497
 <ul class="errorlist"><li>group<ul class="errorlist"><li>Student with this Group already exists.</li></ul></li></ul>

я не не знаю, где ошибка, и я застрял

1 Ответ

0 голосов
/ 06 августа 2020

В каждой группе может быть только один ученик, так работает models.OneToOneField. Используйте models.ForeignKey в модели группы из модели ученика, что позволяет вам иметь связь между группой и несколькими учениками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...