Django: Сбой ограничения NOT NULL: account_tutorvalidator.user_id

Я новичок в django и я создал эту форму "apply now form" исключительно для тьюторов, когда они отправляют форму, она появляется на сайте администратора, и я вручную проверяю, является ли он действительным тьютором. И если они являются действительными тьюторами, я проверю поле is_validated booleanfield в админке на соответствующего тьютора, который отправил форму, так что он/она будет иметь доступ к другим вещам на сайте. Но у меня возникает проблема, что при отправке формы появляется сообщение "NOT NULL constraint failed: account_tutorvalidator.user_id"... Я искал некоторые решения, а также читал похожие вопросы здесь, но я все еще не могу понять, что делать. Может кто-нибудь помочь мне в этом?

вот мой models.py

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_tutor = models.BooleanField(default=False)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    phone_number = models.CharField(max_length=11, blank=False, null=True)
    current_address = models.CharField(max_length=100, null=True)
    image = models.ImageField(default='default-pic.jpg', upload_to='profile_pics')

    def __str__(self):
        return f'{self.first_name} {self.last_name}'

class TutorProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, 
related_name='tutor_profile')
    bio = models.CharField(max_length=255, blank=True)
    is_validated = models.BooleanField(default=False)
    def __str__(self):
        return f"{self.user.first_name} {self.user.last_name}'s Profile"

class TutorValidator(models.Model):
    user = models.ForeignKey(TutorProfile, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    dbs = models.ImageField(upload_to='dbs_pics')
    driving_license = models.ImageField(upload_to='drivers_license_pics', null=True, blank=True)
    national_id = models.ImageField(upload_to='national_id_pics', null=True, blank=True)

    def __str__(self):
        return f"{self.first_name}'s application form"

my forms.py

class TutorValidationForm(forms.ModelForm):
    class Meta:
        model = TutorValidator
        fields = ['first_name', 'last_name', 'driving_license', 'national_id']
        labels = {
        'national_id': _('National ID')
    }

my views.py

class TutorValidatorView(LoginRequiredMixin, FormView):
    template_name = 'account/tutor_validator.html'
    form_class = TutorValidationForm
    success_url = '/'

Ошибка возникает потому, что TutorValidator требует, чтобы вы установили внешний ключ профиля пользователя, который ваша форма в настоящее время не поддерживает, поэтому вам нужен способ установить его для создаваемого объекта и использовать текущего зарегистрированного пользователя (того, кто отправляет форму).

Вы можете сделать это, переопределив form_valid. Попробуйте с:

class TutorValidatorView(LoginRequiredMixin, FormView):
    ...
    def form_valid(self, form):
        tutor_validator = form.save(commit=False)
        tutor_validator.user = self.request.user.tutor_profile 
        tutor_validator.save()
        return HttpResponseRedirect(self.get_success_url())

Обратите внимание, что у текущего пользователя уже должен быть существующий TutorProfile. В противном случае его нужно сначала создать, чтобы подключить к TutorValidator

Вернуться на верх