Исключение Значение: NOT NULL constraint failed: auctions_grade.grader_id

У меня есть модель "домашнее задание" и модель "оценка". Я могу безупречно добавлять новые домашние задания, но когда я пытаюсь оценить их, используя общий класс на основе createview, я получаю "Exception Value: NOT NULL constraint failed: auctions_grade.grader_id". "grader" должен быть автором/пользователем запроса (или профессором).

Models.py

class Hw_upload(models.Model):
    title = models.CharField(blank=True, max_length=255, null=True)
    description = models.TextField(blank=True, max_length=255, null=True)
    document = models.FileField(blank=True, upload_to='documents/', null=True)
    creation_date = models.DateTimeField(default=timezone.now)  
    hw_author = models.ForeignKey(User, on_delete=models.PROTECT, related_name="hw_author")
    course_hw_upload = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course_hw_uploads", null=True)   
    module_hw_upload = models.ForeignKey(Module, on_delete=models.CASCADE, related_name="module_hw_uploads", null=True)      
    activity = models.ForeignKey(Activity, on_delete=models.CASCADE, related_name="hw_uploads", null=True)   

class Grade(models.Model):
    score = models.PositiveIntegerField(validators=[MaxValueValidator(100)], blank=True, null=True)     
    comment = models.TextField(max_length=300, null=True)
    creation_date = models.DateTimeField(default=timezone.now)
    grader = models.ForeignKey(User, on_delete=models.PROTECT, related_name="grade_author")
    graded = models.BooleanField(default=False)
    course_grade = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="course_grades", null=True)
    module_grade = models.ForeignKey(Module, on_delete=models.CASCADE, related_name="module_grades", null=True)      
    activity_grade = models.ForeignKey(Activity, on_delete=models.CASCADE, related_name="activity_grades", null=True)            
    hw_upload = models.ForeignKey(Hw_upload, on_delete=models.CASCADE, related_name="grades")

Forms.py

class Hw_uploadForm(ModelForm):
    class Meta:
        model = Hw_upload
        fields = ['title', 'description', 'document']          

        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Title'}),
            'description': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Body', 'rows':3, 'cols':15}),
        }             

class Hw_gradeForm(ModelForm):
    class Meta:
        model = Grade
        fields = ['score']          

        widgets = {
            'score': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '0-100'})
        }   

Views.py

# Grade homework        
class GradeView(CreateView):
    model = Grade
    template_name = "grading.html"
    form_class = Hw_gradeForm
    success_url = reverse_lazy('index')

    def get(self, request, *args, **kwargs):
        form = Hw_gradeForm

        user = request.user
        grades = Grade.objects.order_by('-creation_date')
        editable = Grade.score

        context = {
            'form': form,
        }

        return render(request, 'auctions/grading.html', context)

    def get_success_url(self, **kwargs):    
    return reverse_lazy('homework_upload', args = (self.object.hw_upload.id,))  

Обратная связь очень ценится!

В вашей форме отсутствуют некоторые обязательные поля. У вас есть поле grader, которое не может быть null, но вы никак не предоставляете его. Вы должны добавить его в бэкенде, т.е. с помощью form.instance.x в методе post():

class GradeView(CreateView):
    ...

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        form.instance.grader = request.user
        if form.is_valid():
            return self.form_valid(form)
        return self.form_invalid(form)

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)
Вернуться на верх