首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常值: NULL约束失败: auctions_grade.grader_id

异常值: NULL约束失败: auctions_grade.grader_id
EN

Stack Overflow用户
提问于 2022-07-09 01:30:16
回答 1查看 24关注 0票数 0

我有一个模型“家庭作业”和一个模型“年级”。我可以完美地添加新的家庭作业,但是当我尝试使用基于泛型类的createview对它们进行评级时,我会得到“异常值: NULL约束失败: auctions_grade.grader_id”。“评分员”应该是作者/请求用户(或教授)。

Models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
# 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,))  

反馈非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-07-09 06:57:37

您在表单中缺少了一些强制字段。您的grader字段不能是null,但您没有以任何方式提供它。您应该将其添加到后端,即在post()方法中使用post()

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72918325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档