Невозможно присвоить "<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='Опубликован')