In Django, when I run migrate I get the error : accounts_userinfo.user_id may not be NULL

In Django, when I run migrate I get the error : accounts_userinfo.user_id may not be NULL

每当我 运行 python manage.py 迁移帐户时,我都会收到错误代码:django.db.utils.IntegrityError:accounts_userinfo.user_id 可能不是 NULL

我相信这是由于我将模型与更多用户信息链接到 django 用户模型造成的。 这是我的 models.py

class UserInfo(models.Model):
    c_name = models.CharField(max_length=120)
    c_site = models.CharField(max_length=120)
    link = models.ForeignKey(User)

有人看到我可能遗漏的明显问题吗? 让我知道您是否需要更多代码。 非常感谢。 -拉姆齐

外键默认不能为空。您要么需要使其可为空:

class UserInfo(models.Model):
    c_name = models.CharField(max_length=120)
    c_site = models.CharField(max_length=120)
    link = models.ForeignKey(User, null = True)

或设置默认值:

class UserInfo(models.Model):
    c_name = models.CharField(max_length=120)
    c_site = models.CharField(max_length=120)
    link = models.ForeignKey(User, default = some_id)

这取决于是否需要 link。看来这很可能是必需的。

发生这种情况是因为数据库中存在没有该字段值的现有数据 (link),并且 Django 无法猜测。另一种选择是删除 UsersUserInfo 表中的所有条目(假设数据未在生产中),然后迁移。

如果您只是想让它工作,您可以将默认值设置为现有用户模型之一,然后进入 Django 管理面板并更正条目.这样做的问题是您必须指定一个可能不存在于其他数据库中的 ID(即 1)。但同样,如果这仍在开发中并且没有实际数据正在迁移,那么你没问题。

最后一个选项是首先将其设置为可空属性,然后进入数据,为所有内容创建条目,然后创建另一个迁移以删除可空属性。