Невозможно присвоить "<SimpleLazyObject: <Пользователь: student1@mail.ru>>": "Answer.id_student" должен быть экземпляром "Student".

Я пытаюсь использовать электронную почту для аутентификации в Django. Раньше я работал напрямую с пользователем, но мне это нужно через класс "Студент".

ПРОСМОТРОВ

class AnswerToCase(FormMixin, DetailView):
    STATUS = [
        ('Участник', 'Участник'), ('Победитель', 'Победитель')]
    model = Case
    template_name = 'addanswer.html'
    form_class = AddAnswer
    success_url = '/'
    context_object_name = 'get_case'
    def post(self, request, *args, **kwargs):
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)
    def form_valid(self, form):

        self.object = form.save(commit=False)
        self.object.id_case = self.get_object()
        

Каким образом правильно указать сохранение объекта для себя?

self.object.id_student = self.request.user

        self.object.is_won = self.get_object()
        self.object.save()
        return super().form_valid(form)

Если я напишу команду следующим образом self.object.id_student = Student.objects.get(user_id=self.request.user)

Ошибка ['Значение "Fun" должно быть True или False']. Fan - название модели "case"

.

Модели

Класс Пользователь

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(db_index=True, unique=True, max_length=254)
    phone = models.CharField(max_length=20, help_text='Номер телефона')
    is_staff = models.BooleanField(default=True)  # must needed, otherwise you won't be at
    is_active = models.BooleanField(default=True)  # must needed, otherwise you won't be «
    is_superuser = models.BooleanField(default=False)  # this field we inherit from Permis
    is_student = models.BooleanField(default=False)
    is_partner = models.BooleanField(default=False)

    objects = CustomUserManager()
    REQUIRED_FIELDS = ["phone"]
    USERNAME_FIELD = 'email'

Классный ученик

class Student(models.Model):
    user = models.OneToOneField(User, verbose_name='id', on_delete=models.CASCADE, primary_key=True)
    Fio = models.CharField(max_length=100, blank=True, verbose_name='ФИО')
    Educational_institution = models.CharField(max_length=50, verbose_name='Место учебы')
    age = models.CharField(max_length=2,verbose_name='возраст')
    region = models.CharField(max_length=50, choices=REGIONS, default=REGIONS[0])
    Direction_of_study = models.CharField(max_length=50, verbose_name='Специальность')
    Education = models.CharField(max_length=50, verbose_name='Образование', choices=EDUCATION, default=EDUCATION[0])
    Course = models.CharField(max_length=50, verbose_name='Курс', choices=COURSE, default=COURSE[0])

Ответ класса

class Answer(models.Model):

    Url = models.URLField(verbose_name='Ссылка на ответ', blank=True)
    File = models.FileField(verbose_name='Файл', upload_to = "file",blank=True)
    id_case = models.ForeignKey(Case, verbose_name="Кейс", on_delete=models.CASCADE,blank=True,related_name='cases')
    

Если изменить класс на User, то сохранение работает id_student = models.ForeignKey(Student, verbose_name="Студент", on_delete=models.CASCADE,blank=True)

.
   id_student = models.ForeignKey(Student, verbose_name="Студент", on_delete=models.CASCADE,blank=True)
    is_won = models.BooleanField(default=False)

Классный случай

class Case(models.Model):
    title = models.CharField(max_length=200, verbose_name='Название')
    description = models.TextField(verbose_name='Описание кейса')
    date_of_create = models.DateTimeField(auto_now=True, verbose_name='Дата создания')
    date_of_edit = models.DateTimeField(auto_now_add=True, verbose_name='Дата последней редакции')
    date_of_close = models.DateTimeField(verbose_name='Дата закрытия')
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='Категории')
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='partners')
    is_published = models.BooleanField(default=True, verbose_name='Опубликован')
Вернуться на верх