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

在Django将OneTONE(主键=Tue)转换为外键

解柏
2023-03-14

模型中,我有一个主键为True的OnetoOne字段。现在我想将其更改为ForeignKey,但无法更改,因为没有“id”。

由此:

user=models.OneToOneField(用户,主键=True,on\u delete=models.CASCADE)

为此:

user1=models.ForeignKey(用户,相关的\u name='inventory',在\u delete=models.CASCADE上)

在makemigrations时显示此选项:

您正在尝试将不可为空的字段“id”添加到HistoricalUserQuestion,而不使用默认值;我们不能这样做(数据库需要一些东西来填充现有的行)。请选择一个修复程序:1)立即提供一个一次性默认值(将在此列的所有现有行上设置一个空值)2)退出,让我在models.py中添加一个默认值

那怎么做呢?谢谢

共有3个答案

宰修能
2023-03-14

问题是您试图删除主键,但Django随后将添加一个名为“id”的新主键。这是不可为空且唯一的,因此不能真正提供一次性默认值。

最简单的解决方案是创建一个新模型并在SQL迁移中复制表,使用旧的用户id填充id字段。确保重置表序列以避免冲突。

夹谷鸿福
2023-03-14

Django模型有一个默认的ID属性。自从您更改了模型后,以前的数据记录现在已经与您的新列属性冲突,因为当添加以前的记录时,没有ForeignKey。请记住,在您的外键中,空值是不允许的。您的解决方案有多种修复。一个接一个地遵循这些步骤,看看是什么解决了你的问题。

  • 删除迁移文件并再次运行迁移

在外键中设置NULL=True

删除表的以前记录以解决冲突,以便在运行迁移时,它会添加id本身的默认值

您也可以像这样直接尝试更改迁移文件,而不是删除

https://stackoverflow.com/a/29074241/11979793

暴博远
2023-03-14

只需删除以前的迁移

e.g 

    migrations:
          |
          |- 001.initail.py
          |- 002.examplefiles.py

您只需删除最近的迁移和

运行命令

python3 manage.py makemigrations
python3 manage.py migrate
 类似资料:
  • 我在将外键映射为主键时遇到问题。 我的桌子是: 下面是我定义为实体的类: 客户爪哇: 游戏。爪哇: 票爪哇: 票d.java: 到目前为止,我已经尝试了所有的建议,但没有一个有用。另外,我需要这个PK由外键组成,所以我真的需要帮助解决,我应该如何正确地映射它。

  • 我正在使用Hibernate 4.2.6、JSF2(Mojarra 2.1.13)和Tomcat 7.0.34来开发我的Web应用程序。我试图使用Hibernate注释定义两个类之间的OneToOne关系。我认为我做错了什么,因为我得到了一个ORA-02291异常:完整性约束(PER_VPT_F01)被违反-父密钥未找到。我花了将近8个小时试图找到错误在哪里,但没有任何成功。拜托,有人能看看这个代

  • 有没有办法做到这一点? 我有一个角色,说“/”,我想得到这个的键盘组合。 对于德语布局,“/”将是Shift7。

  • 如何使用hibernate注释实现下表? 当前代码为:(为简洁起见,已删除) 使用者 社交网络 SocialProfile公司 显然我的代码现在不能正常工作。有人能解释一下吗?

  • 我有一个这样的实体: 多谢了,安德里亚

  • 在实体框架中,我想使用两个外键作为另一个实体类型的主键。 但是,这会给我一个缺少键的错误。 我知道我可以定义另外两个属性来保存引用实体类型的主键。Visual Studio是否不够聪明,无法自行使用它们的主键?