外键约束错误在Django中

时间:2017-04-09 15:21:12

标签: mysql django

我正在扩展Django中的抽象用户模型,它不会让我迁移抛出与外键相关的错误。

from django.db import models
from django.contrib.auth.models import AbstractUser
import uuid

#Database model for Users.
class User(AbstractUser):
'''
    Abstract user model inherited containing all basic fields such as:
    first and last name, username, email, password etc. Abstract User fields. 
'''
    user_id = models.UUIDField(
        primary_key = True, 
        default = uuid.uuid4, 
        editable = False
        )
    is_owner = models.BooleanField(
    default = False
    )



    class Meta:
        db_table = 'Users'

    def __str__(self):
         self.constructLabel(
            self.first_name, 
            self.last_name,
            self.user_id
        )

错误: django.db.utils.IntegrityError:(1215,'无法添加外键约束')

从数据库错误是:

2017-04-09 20:33:07 0x7f3440171700 Error in foreign key constraint of table shipapp/#sql-3c9_33:
 FOREIGN KEY (`user_id`) REFERENCES `users_user` (`user_id`):
Cannot resolve table name close to:
 (`user_id`)

任何遇到这种情况的人都可以帮助我吗?自Django 1.8.5发布以来,我一直没有接触过。 :(

1 个答案:

答案 0 :(得分:0)

我至少解决了我的问题,虽然这不是推荐的解决方法,尽管解决方案可能特定于我的问题。当我刚开始制作模型时,我可以重新初始化整个项目并复制模型并再次进行迁移。 问题是我认为在创建的初始迁移文件中以及在重复删除和重新创建文件之后,错误仍然来自这些初始文件。

从这里学到的教训以及我做错的事情是:

错误:

  1. 我根据我同时制作的E-R图制作了多个模型。
  2. 当我制作所有这些时,我没有迁移。
  3. 同时建立所有关系。
  4. 试图立即迁移它们并且出现了一个竞争条件 类。在制作模型时尝试了每个关系。我读 某个人引用的地方“你不能吃糕点 仍然保持自己。“
  5. 我应该做些什么:

    1. 逐个制作模型。
    2. 迁移模型,保持它们原子,即:没有关系 它们之间。只保留非关系字段。
    3. 迁移模型后,写出之间的关系 模型。
    4. 然后使用它们之间的关系迁移模型。