首页 > 解决方案 > IntegrityError NOT NULL 约束在 Django 中失败

问题描述

我有两个模型,问题和答案。当我尝试从用户端添加答案时出现此错误。(从管理面板添加是可以的)。我在 stackoverflow 和其他网站上经历了一些解决方案。我每次删除现有数据库并运行迁移,但没有任何效果。这是我的代码:

模型.py

from django.conf import settings
from django.db import models
from django.utils import timezone


class Question(models.Model):
    author                  = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title                   = models.CharField(max_length=300)
    optional_description    = models.TextField(blank=True, null=True)
    created_date            = models.DateTimeField(default=timezone.now)
    published_date          = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title


class Answer(models.Model):
    question            = models.ForeignKey('ask.Question', on_delete=models.CASCADE, related_name='answers')
    author              = models.CharField(max_length=200)
    text                = models.TextField()
    created_date        = models.DateTimeField(default=timezone.now)
    approved_answer     = models.BooleanField(default=False)


    def approve(self):
        self.approved_answer = True
        self.save()

    def __str__(self):
        return self.text

views.py 中的相关部分

def add_answer_to_que(request, pk):
    que = get_object_or_404(Question, pk=pk)
    if request.method == 'POST':
        form = AnswerForm(request.POST)
        if form.is_valid():
            answer = form.save(commit=False)
            answer.que = que
            answer.save()
            return redirect('ques_detail', pk=que.pk)
    else:
        form = AnswerForm()
    return render(request, 'ask/add_answer_to_que.html', {'form': form})

表格.py

class AnswerForm(forms.ModelForm):

    class Meta:
        model = Answer
        fields = ('author', 'text',)

在此处输入图像描述

单击编写答案按钮会转到此页面

在此处输入图像描述

但是在添加一些内容并单击发送后会导致此错误。

在此处输入图像描述

标签: django

解决方案


错误是一致的answer.que = que

只需将该行更改为answer.question = que

因为您没有queAnswer表中命名任何列。

希望能帮助到你。


推荐阅读