在Django中,当我运行迁移时,我收到错误:accounts_userinfo.user_id可能不是NULL

时间:2016-06-27 20:31:46

标签: python django django-models django-forms web-frameworks

每当我运行python manage.py migrate accounts时,我都会收到错误代码: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)

有人看到我可能遗失的明显问题吗? 如果您需要更多代码,请告诉我们。 非常感谢。 -Ramsey

1 个答案:

答案 0 :(得分:2)

默认情况下,外键不能为空。你需要让它可以为空:

year

或设置默认值:

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)而Django不能猜测。另一种选择是删除linkUsers表中的所有条目(假设数据不在生产中),然后进行迁移。

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

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