当前位置: 首页 > 知识库问答 >
问题:

非空约束失败:forum_question

万德海
2023-03-14

我尝试使用cbv的im来保存一个对象,我不熟悉使用它,并且我尝试使用create view来保存一个对象,但是得到这个错误:

"Not NULL约束失败:forum_question.user_id"

我将不胜感激初学者友好的解释如何解决这个问题,也许还有提示,谢谢!

models.py:

class Question(VoteModel, models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    detail = models.TextField()
    tags = models.TextField(default='')
    add_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

表单.py:

class QuestionForm(ModelForm):
    class Meta:
        model = Question
        fields = ['title', 'detail', 'tags']

视图.py:

class AskForm(CreateView):
    def post(self):
        user = self.request.user
        model = Question
        form_class = QuestionForm
        template_name = 'forum/ask-question.html'
        if form_class.is_valid():
            form_class.save()

例外?:

编辑3:

其他信息:

回溯(最近一次调用最后):文件“/主页/钛/本地/库/python3.8/站点包/django/核心/处理程序/异常.py”,第47行,在内部响应=get_response(请求)文件“/家/钛/.本地/lib/python3.8/站点包/django/core/处理程序/基.py”,第181行,在_get_response响应=wrapped_callback(请求,*callback_args,**callback_kwargs)文件“/家/钛/本地/lib/python3.8/站点包/django/视图/通用/基.py”, 第 69 行,在视图返回自我调度(请求,*args, **kwargs) 文件“/主页/钛/.本地/lib/python3.8/站点包/django/视图/通用/基地.py”,第 101 行,在调度返回处理程序(请求,*args, **kwargs) 文件“/主页/钛/本地/本地/lib/python3.8/站点包/django/视图/通用/编辑.py”,第 174 行,在返回后超级().post(请求, *args, **kwargs) 文件 “/家/钛/.本地/lib/python3.8/站点包/django/视图/通用/编辑.py”, 第144行,在后返回self.form_valid(形式)文件“/家/钛/本地/lib/python3.8/站点包/django/视图/通用/编辑.py”,第127行,在form_valid自我对象=form.save() 文件“/家/钛/.本地/库/python3.8/站点包/django/表单/模型.py”,第466行,在保存自我实例中保存() 文件“/家/钛/本地/库/蟒蛇3.8/站点包/投票/模型.py”,第67行,在保存超级(投票模式, 自我).保存(*args, **kwargs) 文件“/家/钛/.本地/库/python3.8/站点包/django/db/model/base.py”,第743行,在保存self.save_base(使用=使用,force_insert=force_insert,文件“/家/钛/.本地/库/蟒蛇3.8/站点包/django/db/模型/基地.py”,第780行,save_base更新=self._save_table(文件“/家/钛/本地/库/蟒蛇3.8/站点包/django/db/model/base.py”, 行 885, 在 _save_table 结果 = self._do_insert(cls._base_manager, 使用, 字段, returning_fields, 原始) 文件 “/家/钛/.本地/库/python3.8/站点包/django/db/模型/基地.py”, 第 923 行, 在 _do_insert 返回manager._insert( 文件 “/主页/钛/.本地/lib/python3.8/站点包/django/db/模型/管理器.py”, 第 85 行, 在 manager_method 返回 getattr(self.get_queryset(), name)(*args, **kwargs) 文件“/家/钛/.本地/库/python3.8/站点包/django/db/db/模型/查询.py”,第 1301 行,_insert返回query.get_compiler(使用=使用).execute_sql(returning_fields) 文件“/主页/钛/本地/库/蟒蛇3.8/站点包/詹戈/db/模型/sql/编译器.py”,第 1441 行,在execute_sql光标中执行(sql,参数) 文件“/主页/钛/本地/库/蟒蛇3.8/站点包/django/db/后端/utils.py”, 第99行,在执行返回超级().execute(sql, params) 文件“/主页/钛/.本地/lib/python3.8/站点包/django/db/后端/utils.py”,第67行,在执行返回self._execute_with_wrappers(sql,参数,许多=错误,执行器=self._execute)文件“/主页/钛/.本地/lib/python3.8/站点包/django/db/后端/utils.py”,第76行,_execute_with_wrappers返回执行器(sql, 参数,很多,上下文) 文件“/家/钛/.本地/库/python3.8/站点包/django/db/后端/utils.py”,第85行,_execute返回自.cursor.execute(sql,参数)文件“/家/钛/本地/库/蟒蛇3.8/站点包/django/db/utils.py”,第90行,在退出中,从 dj_exc_value exc_value文件“/家/钛/本地/本地/库/蟒蛇3.8/站点包/django/db/后端/utils.py”, 第85行,_execute返回自我.cursor.execute(sql, params) 文件“/主页/钛/本地/库/库/python3.8/站点包/django/db/后端/sqlite3/base.py”,第416行,在执行返回数据库.Cursor.execute(自我,查询,参数)django.db.utils.Integrity错误:不是空约束失败:forum_question.user_id [14/Apr/2022 09:58:02] “POST /ask/ HTTP/1.1” 500 175023

共有2个答案

邓兴为
2023-03-14

我不确定这是否仍然有用,但是,我遇到了相同的错误。您可以通过删除迁移文件和数据库来修复错误。错误是由于将NULL数据(无数据)发送到数据库中已存在的字段,通常是在该字段被修改或删除之后。

钱澄邈
2023-03-14

论坛问题实例必须有一个非空用户字段,但您没有指定与您正在创建的对象相关的用户。如果您不想添加用户,请将模型的用户字段更新为:

user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)

或者在ask表单中重载form_valid()以添加类似的用户(注意,我没有直接测试,请参阅此处的文档):

   class AskForm(CreateView):
       def post(self):
           user = self.request.user
           model = Question
           form_class = QuestionForm
           template_name = 'forum/ask-question.html'
           if form_class.is_valid():
               form_class.save()

        def form_valid(self, form):
            form.instance.created_by = self.request.user
            return super().form_valid(form)
 类似资料:
  • 主要内容:在创建表时设置非空约束,在修改表时添加非空约束,删除非空约束MySQL非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。 比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约

  • 问题内容: 我收到此错误消息: 第40行的错误1217(23000):无法删除或更新父行:外键约束失败 …当我尝试放置桌子时: …定义如下: 有趣的是, 我已经删除 了模式中具有外键的 所有其他表。实际上,除了表外,数据库是空的。 如果数据库中没有其他对象,怎么可能会有子行?据我所知,InnoDB不允许在其他模式上使用外键,对吗? (我什至可以运行命令:-?) 问题答案: 两种可能性: 在另一个架

  • 嗨,我知道有人问过这个问题,但我还没有找到正确的答案,为什么当我尝试做我的第二个插入: 我得到了错误: 错误1452(23000):无法添加或更新子行:外键约束失败(.,约束外键()引用()) 下面的DDL代码:

  • 我刚接触laravel,尝试存储数据,但不断出现以下错误: 在控制器中的存储方法: 店铺请求: 数据库: 错误指向控制器: 但不确定怎么解决。请帮忙。提前谢谢。

  • 问题内容: 我正在使用Django从Tango中学习Django,但是在输入时,我始终收到此错误: 这是输出: Models.py: 问题答案: 造成这种限制的原因可能是,在你最初迁移它时,在类中没有任何字段被调用(第一次迁移),并且在模型中添加了该字段之后,当你运行时,你已将默认值设置为静态值值(即或”等),并且打破了类别表的表段列的唯一约束,其中表段应该是唯一的,但这不是因为所有条目都将获得该

  • 我正在做一个基本的例子来测试级联删除操作,但我得到了异常。这是我的实体