每当我运行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
答案 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不能猜测。另一种选择是删除link
和Users
表中的所有条目(假设数据不在生产中),然后进行迁移。
如果您只是尝试使其正常工作,您可以将默认设置为现有用户模型之一,然后进入Django管理面板并更正条目。这个问题是您必须指定一个ID(即UserInfo
),这可能不存在于其他数据库中。但同样,如果这仍然在开发中并且没有真正的数据被迁移,那么你就没事了。
最后一个选项是首先将其设置为可为空,然后进入数据,为所有内容创建条目,然后创建另一个迁移以删除可为空的属性。