NOT NULL约束失败:issue_tracker_label.project_id

时间:2018-07-31 19:09:56

标签: python django

我正在尝试创建“标签”。基本上,您单击“标签”按钮,它将在下面显示标题和内容。我正在使用POST方法。但是当我单击“提交”时,它给了我这个错误:

IntegrityError at /project/1/issue/2/label/
NOT NULL constraint failed: issue_tracker_label.project_id

顺便说一句,我使用的是脆皮形式,在修改了model.py之后,我确实进行了makemigrations和迁移。不知道为什么我仍然收到此错误。

view.py

@csrf_exempt
def label_create(request, project_id,issue_id):
    issue = get_object_or_404(Issue, id=issue_id)
    project = Project.objects.get(id=project_id)
    if request.method == 'POST':
        form = LabelForm(request.POST)
        if form.is_valid():
            label = form.save(commit=False)
            label.issue = issue
            label.save()
            return redirect('project:issue_tracker:issue_detail', project_id=project.id, issue_id=issue.id)
    else:
        form = LabelForm()
    template = 'issue_tracker/issue/label.html'
    context = {'form': form, 'project': project}
    return render(request, template, context)

model.py

class Label(models.Model):
    issue = models.ForeignKey(Issue, related_name='issue_label', on_delete=models.CASCADE)
    project = models.ForeignKey(Project, related_name='project_label', on_delete=models.CASCADE)
    title=models.CharField(max_length=20,default='Debug')
    color=models.CharField(max_length=20,default='red')


    def __str__(self):
        return self.title

form.py

class LabelForm(forms.ModelForm):
    class Meta:
        model = Label
        fields = ('title','color',)

1 个答案:

答案 0 :(得分:1)

尝试将项目添加到对象保存中:

views.py

@csrf_exempt
def label_create(request, project_id,issue_id):
    issue = get_object_or_404(Issue, id=issue_id)
    project = Project.objects.get(id=project_id)
    if request.method == 'POST':
        form = LabelForm(request.POST)
        if form.is_valid():
            label = form.save(commit=False)
            label.issue = issue
            label.project = project
            label.save()
            return redirect('project:issue_tracker:issue_detail', project_id=project.id, issue_id=issue.id)
    else:
        form = LabelForm()
    template = 'issue_tracker/issue/label.html'
    context = {'form': form, 'project': project}
    return render(request, template, context)

通知label.project = project