NOT NULL 约束失败:jobs_job.created_by_id IntegrityError 在 /jobs/add/

NOT NULL constraint failed: jobs_job.created_by_id IntegrityError at /jobs/add/

我试图让用户能够添加工作,但在填写表格后我收到了那个错误。这是我的代码:

models.py

from django.db import models
from django.contrib.auth.models import User


class Job(models.Model):
    title = models.CharField(max_length=255)
    short_description = models.TextField()
    long_description = models.TextField(blank=True, null=True)


    created_by = models.ForeignKey(User, related_name='jobs', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    changed_at = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.title 

views.py

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required

from .forms import AddJobForm
from .models import Job

def job_detail(request, job_id):
    job = Job.objects.get(pk=job_id)
    return render(request, 'jobs/job_detail.html', {'job': job})

@login_required
def add_job(request):
    if request.method == 'POST':
        form = AddJobForm(request.POST)

        if form.is_valid():
            job = form.save(commit=True)
            job.created_by = request.user
            job.save()

            return redirect('dashboard')

    else:
        form = AddJobForm()

    return render(request, 'jobs/add_job.html', {'form': form})

forms.py

from django import forms
from .models import Job


class AddJobForm(forms.ModelForm):
    class Meta:
        model = Job
        fields = ['title','short_description','long_description']

我需要做什么来解决这个错误?我尝试从 views.py 中删除 commit=True,我尝试删除 sqlite3 并再次进行迁移。

您正在尝试保存没有 created_by 值的对象(因此出现错误消息),然后为该字段分配一个值并再次保存。你应该改变

job = form.save(commit=True)

job = form.save(commit=False)

以便第一个 .save 实际上不会尝试向数据库提交任何内容。它仅用于构造 Job 实例,以便您可以补全任何缺失值并使用 job.save().

实际保存它

请注意,如果省略 commit= 参数,则假定为 True