Python 如果我在模型上更改外键/其他关系,Django makemigrations工具将失败
我对Djang makemigrations/migrate工具有问题Python 如果我在模型上更改外键/其他关系,Django makemigrations工具将失败,python,django,postgresql,migrate,makemigrations,Python,Django,Postgresql,Migrate,Makemigrations,我对Djang makemigrations/migrate工具有问题 我有一个带foreignkey的提取模型到Employee表。一切正常 models.py from django.contrib.auth.models import User class Withdraw(models.Model): employee_id = models.ForeignKey(Employee, on_delete = models.PROTECT) amount = models
from django.contrib.auth.models import User
class Withdraw(models.Model):
employee_id = models.ForeignKey(Employee, on_delete = models.PROTECT)
amount = models.IntegerField(default=0)
withdraw_date = models.DateTimeField(default=timezone.now)
is_confirmed_by_employer = models.BooleanField(default=False)
谢谢 如果不添加默认值或使字段为空,则需要填充所有现有条目。您只需将字段设置为空即可
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
或者,在步骤4中,您可以只输入任何现有用户的id。(1将是您创建的第一个帐户,如果您没有删除它。)如果不添加默认值或使字段为空,则需要填充所有现有条目。您只需将字段设置为空即可
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
或者在第4步中,您可以只输入任何现有用户的id。(如果您没有删除它,1将是您创建的第一个帐户。)是的,这是自然行为 这里发生的事情是, 当您第一次在数据库中创建其他行时(在创建用户字段之前),用户字段不存在,而现在在该数据库中添加用户字段时,您并没有将其设置为null或空白,因此Django会询问“以前保存的行如何?它们不能为null”。所以最好的选择是通过提供一次性默认值来填充这些字段。要做到这一点,你必须选择选项1,然后填补那些缺失的空间
我不推荐@jTiKey给出的答案,因为如果您允许用户字段为空或null,用户可以在不给出用户字段的情况下退出,我想您不会希望这样做。是的,这是自然行为 这里发生的事情是, 当您第一次在数据库中创建其他行时(在创建用户字段之前),用户字段不存在,而现在在该数据库中添加用户字段时,您并没有将其设置为null或空白,因此Django会询问“以前保存的行如何?它们不能为null”。所以最好的选择是通过提供一次性默认值来填充这些字段。要做到这一点,你必须选择选项1,然后填补那些缺失的空间
我不推荐@jTiKey给出的答案,因为如果您允许用户字段为空或null,用户可以在不给出用户字段的情况下退出,我想您不会想要这样。我不认为设置
blank=True,null=True
是一个好主意。在填充了所需用户后,可以将其删除,但在创建它之前不能这样填充它。我不认为设置blank=True,null=True
是个好主意。它可以在填充了所需用户之后删除,但在创建它之前不能这样填充。如何在添加字段之前逐个填充它们?如果有超过您可以手动填写的条目,该怎么办?@jTiKey抱歉,错误地说我们必须提供一次性默认值,您如何在添加字段之前逐个填充这些条目?如果您无法手动填写的条目太多怎么办?@jTiKey抱歉,错误地说我们必须提供一次性默认值