首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在django中将外键添加到模型时,NOT_NULL对比失败

在django中将外键添加到模型时,NOT_NULL对比失败
EN

Stack Overflow用户
提问于 2021-10-30 08:19:40
回答 1查看 87关注 0票数 0

我在做一个笔记应用程序。当我尝试创建一个外键来链接用户及其注释时,我在使用

代码语言:javascript
复制
python manage.py migrate

。我对外键非常陌生,我看了Django的文档,这就是他们是如何创建外键的。

下面是代码:

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

class User(models.Model):
    username = models.CharField(max_length=50)
    email = models.EmailField(max_length=50)



class Note(models.Model):
    body = models.TextField(null=True, blank=True)
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)


    def __str__(self):
        return self.body[0:50]

以下是错误:

代码语言:javascript
复制
django.db.utils.IntegrityError: NOT NULL constraint failed: new__api_note.author_id
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-30 08:30:03

您的问题是,数据库中存在没有author_id字段的现有注释,但您没有设置默认值,也不允许将其保留为空白。因此,添加字段是一个IntegrityError

您可以通过两种方法解决这一问题:

允许字段为空

  1. 删除迁移文件夹中的最后一次迁移
  2. 编辑作者字段如下:

代码语言:javascript
复制
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)

  1. 运行生成和迁移

为字段设置默认值

  1. 删除迁移文件夹中的最后一次迁移。您也可以编辑它,但是简单地删除它是最简单的
  2. 运行makemigrations (在make迁移期间再次运行makemigrations),如果您想为该字段提供默认值,它将提示您。选择“为当前提供一个有价值的内容”
  3. Type models.User.objects.all().first()或为现有notes选择其他"defalt“作者
  4. Runmodels.User.objects.all().first()

还可以通过从数据库中删除所有现有注释来解决此问题。

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

https://stackoverflow.com/questions/69777928

复制
相关文章

相似问题

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