【问题标题】:How to resolve Django IntegrityError NOT NULL Constraint Field?如何解决 Django IntegrityError NOT NULL 约束字段?
【发布时间】:2020-07-18 00:38:11
【问题描述】:

我正在构建一个在线法官,其中我有一个问题模型和一个答案模型。

models.py

from django.db import models
from django.core.validators import FileExtensionValidator
from django.urls import reverse

class Question(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    solution = models.FileField(
    validators=[FileExtensionValidator(allowed_extensions=['txt'])], upload_to= 'media')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('coder:detail', kwargs={'pk': self.pk})

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    result = models.CharField(max_length=100,default = 'answer', null = True, blank = True)
    # result = models.FileField( null= True, blank=True, default = 'media/media/output.txt',
    # validators=[FileExtensionValidator(allowed_extensions=['txt'])], upload_to= 'media')

    def __str__(self):
        return f'{self.question.title} Answer'
    def get_absolute_url(self):
        return reverse('coder:detail', kwargs={'pk': self.pk})

views.py

from django.shortcuts import get_object_or_404, render
from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import ListView, DetailView, CreateView, UpdateView, RedirectView
from django.db.models import Q
from .models import Question, Answer


class CoderListView(ListView):
    model = Question
    template_name = "coder/coder_list.html"
    context_object_name = 'question'


class CoderDetailView(DetailView):
    model = Question
    template_name = "coder/coder_detail.html"


class CoderCreateView(CreateView):
    model = Answer
    fields = ['result']
    context_object_name = 'answer'
    success_url = reverse_lazy('coder:list')
    template_name = "coder/coder_form.html"

    def form_valid(self, form):
        return super().form_valid(form)

我到底做错了什么?

我之前尝试过 FileField,但是当我不断收到错误时,我在刷新数据库后尝试了 CharField 以进一步调试,但我一直收到此错误:

是的,我确实尝试过适当地设置 null、空白和默认值,但仍然没有运气。也许与signals.py 文件有关?或者,也许我正在错误地执行外键,无论我做错了什么,我现在都无法指出。我们将不胜感激。

此页面正在使用 CoderCreateView。

【问题讨论】:

  • 这个页面使用的是哪个视图?
  • @crimsonpython24 CoderCreateView.

标签: python django django-models foreign-keys


【解决方案1】:

我相信这是导致问题的原因:

class CoderCreateView(CreateView):
    model = Answer
    fields = ['result']
    context_object_name = 'answer'

对于答案模型,您忘记传递答案所链接的问题的主键/对象(无论您喜欢哪种方式),如models.py 中的这一行:

question = models.ForeignKey(Question, on_delete=models.CASCADE)

【讨论】:

  • 我真的不明白你的意思。你能详细说明一下吗?您刚刚将我的代码粘贴回去了。
  • 一个Answer 对象有一个问题外键和结果字符域。我的意思是您只处理了result,但您没有将question_id 添加到您的表单中。
  • 刚刚添加了它,但我仍然收到错误消息。一个不同的。一个关键错误。
  • Nvm,我修好了。我通过了 id 并发现当我在 views.py 中使用 qid 作为 id 时,在 urls 中没有使用 的关键错误
猜你喜欢
  • 1970-01-01
  • 2020-12-19
  • 2016-04-02
  • 1970-01-01
  • 2020-06-28
  • 2019-02-14
  • 2023-03-20
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多