繁体   English   中英

如何解决 NOT NULL 约束失败 Django 中的错误

[英]How to solve the NOT NULL constraint failed Error in Django

当我想在我的电子学习网站上保存一门新课程时,我收到了一个 IntegrityError。 当然,我在 StackOverflow 上搜索过类似的解决方案,但找不到适合我的解决方案的方法。

这是我的模型

用户帐户 Model

from django.db import models
from django.contrib.auth.models import AbstractUser
class UserAccount(AbstractUser):
    email = models.EmailField(
        max_length=255, verbose_name='email', unique=True)
    username = models.CharField(max_length=255,  unique=True)
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

课程 Model

from django.db import models
from accounts.models import UserAccount
class Course(models.Model):
    owner = models.ForeignKey(
        UserAccount, related_name='courses_created', on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    slug = models.SlugField()
    description = models.TextField()
    cover_photo = models.ImageField(upload_to="cover/", null=True, blank=True)

另外,我的课程表在这里

class CourseForm(forms.ModelForm):
    class Meta:
        model = Course
        fields = ['curriculum', 'title', 'description', 'cover_photo']
        widgets = {
            'description': forms.Textarea(attrs={'rows': 3})
        }

所以在我看来,我喜欢使用get_context_data方法将我的课程列表和我的CourseForm()发送到模板。 代码如下

我的基于班级的观点

class OwnerListMixin(object):
    def get_queryset(self):
        qs = super().get_queryset()
        return qs.filter(owner=self.request.user)


class OwnerCourseMixin(OwnerListMixin, LoginRequiredMixin,  PermissionRequiredMixin):
    model = Course
    fields = ['curriculum', 'title', 'description', 'cover_photo']
    success_url = reverse_lazy('manage_course_list')

class ManageCourseListView(OwnerCourseMixin, ListView):
    template_name = "courses_app/manage/course/list.html"
    permission_required = "courses_app.view_course"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = CourseForm()
        return context

但是当我在模板中呈现表单以保存新课程时,出现以下错误

IntegrityError at /create/ NOT NULL 约束失败:courses_app_course.owner_id

创建视图

class CourseCreateView(OwnerCourseMixin, CreateView):
    permission_required = "courses_app.add_course"
    template_name = "courses_app/manage/course/form.html"
    success_url = reverse_lazy("manage_course_list")

您需要将用户设置为所有者当前未发生的事情。 表单正在与您设置的字段一起保存。 有多种添加用户的方法。 你可以这样做。

from django.shortcuts import redirect

class CourseCreateView(OwnerCourseMixin, CreateView):
    permission_required = "courses_app.add_course"
    template_name = "courses_app/manage/course/form.html"
    success_url = reverse_lazy("manage_course_list")

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.owner = self.request.user
        instance.save()
        return redirect(self.get_success_url())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM