我有一个模型“家庭作业”和一个模型“年级”。我可以完美地添加新的家庭作业,但是当我尝试使用基于泛型类的createview对它们进行评级时,我会得到“异常值: NULL约束失败: auctions_grade.grader_id”。“评分员”应该是作者/请求用户(或教授)。
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,)) 反馈非常感谢!
发布于 2022-07-09 06:57:37
您在表单中缺少了一些强制字段。您的grader字段不能是null,但您没有以任何方式提供它。您应该将其添加到后端,即在post()方法中使用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)https://stackoverflow.com/questions/72918325
复制相似问题