Python 在Django中,当我运行migrate时,我得到一个错误:accounts\u userinfo.user\u id不能为NULL

Python 在Django中,当我运行migrate时,我得到一个错误:accounts\u userinfo.user\u id不能为NULL,python,django,django-models,django-forms,web-frameworks,Python,Django,Django Models,Django Forms,Web Frameworks,每当运行python manage.py migrate accounts时,都会得到错误代码:django.db.utils.integrityyerror:accounts\u userinfo.user\u id可能不为NULL 我相信这是因为我将一个模型与更多的用户信息联系在一起,与django用户模型联系在一起。 这是我的模特 class UserInfo(models.Model): c_name = models.CharField(max_length=120)

每当运行python manage.py migrate accounts时,都会得到错误代码:django.db.utils.integrityyerror:accounts\u userinfo.user\u id可能不为NULL

我相信这是因为我将一个模型与更多的用户信息联系在一起,与django用户模型联系在一起。 这是我的模特

class UserInfo(models.Model):
    c_name = models.CharField(max_length=120)
    c_site = models.CharField(max_length=120)
    link = models.ForeignKey(User)
有人看到我可能遗漏的明显问题吗? 如果您需要更多代码,请告诉我。 多谢。
-默认情况下,Ramsey

外键不能为空。您需要将其设置为可为空:

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无法猜测。另一个选项是删除
Users
UserInfo
表中的所有条目(假设数据不在生产中),然后迁移

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


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

您好,谢谢您的回答。我该如何将其设置为现有的用户模型?我在数据库里没有什么重要的东西,所以我把所有的东西都处理掉了,但是问题仍然在发生。我应该将default=设置为什么?谢谢你的帮助!嗯,看不到所有东西很难说。这似乎与迁移的运行顺序有关。你在使用什么数据库?是否尝试完全删除数据库并再次运行migrate命令?除此之外,我建议删除失败的迁移,设置
null=True
,然后创建另一个迁移。至少看看这能否解决问题。您可以将默认值设置为数据库中任何用户的ID。这只是一个整数,谢谢。我设法使它工作(某种程度上)我现在可以在admin中访问表,不幸的是,现在我正试图通过传入用户名将初始用户(django)表单与UserInfo表单链接,以便正确完成链接。我的意思是,外键用户将自动设置为在进入userinfo表单之前输入的用户名。你明白我的意思吗?关于如何实现这一点,你有什么想法吗?你必须为此提出一个新的问题,因为这是不相关的。Django有关于您正在使用的设计模式的文档。