首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NULL约束失败: jobs_job.created_by_id IntegrityError at /jobs/add/

NULL约束失败: jobs_job.created_by_id IntegrityError at /jobs/add/
EN

Stack Overflow用户
提问于 2021-03-31 01:53:37
回答 1查看 1.1K关注 0票数 1

我试图使用户能够添加作业,在填写表单后,我得到了该错误。这是我的代码:

models.py

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

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

代码语言:javascript
复制
from django import forms
from .models import Job


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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 01:56:46

您正在尝试保存对象而不为created_by设置值(因此出现了错误消息),然后为该字段分配一个值,然后再次保存。你应该换衣服

代码语言:javascript
复制
job = form.save(commit=True)

代码语言:javascript
复制
job = form.save(commit=False)

这样,第一个.save实际上就不会尝试向数据库提交任何东西。它只用于构造Job实例,这样您就可以完成任何缺失的值,并使用job.save()实际保存它。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66880600

复制
相关文章

相似问题

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