Error after creating a foreign key: django.db.utils.IntegrityError: MyApp_job__new.level_id may not be NULL
Error after creating a foreign key: django.db.utils.IntegrityError: MyApp_job__new.level_id may not be NULL
我在我的模型中创建了一个新属性 level
。我忘了在迁移前把 null=True
放在那里。当 cmd 询问我是否要输入默认值时,我输入了 None
。现在,我做不到 migrate
。所以我尝试删除 level
列并创建新的 makemigrations
但是当我尝试调用 migrate
.
时仍然会出现同样的问题
django.db.utils.IntegrityError: MyApp__job__new.level_id may not be NULL
有没有办法回到没有level
属性时的状态?
makemigrations:
Migrations for 'SolutionsForLanguagesApp':
0019_remove_job_level.py:
- Remove field level from job
迁移:
(venv) C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2>pyth
on manage.py migrate
Operations to perform:
Synchronize unmigrated apps: essay, true_false, super_inlines, staticfiles, mu
ltichoice, messages, quiz, django_tables2, crispy_forms
Apply all migrations: admin, contenttypes, SolutionsForLanguagesApp, auth, ses
sions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying SolutionsForLanguagesApp.0013_auto_20160413_1615...Traceback (most re
cent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\__init__.py", line 354, in execute_fr
om_command_line
utility.execute()
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\base.py", line 445, in execute
output = self.handle(*args, **options)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\commands\migrate.py", line 222, in ha
ndle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\executor.py", line 110, in migrate
self.apply_migration(states[migration], migration, fake=fake, fake_initial=f
ake_initial)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\executor.py", line 148, in apply_migrat
ion
state = migration.apply(state, schema_editor)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\migration.py", line 115, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, projec
t_state)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\operations\fields.py", line 62, in data
base_forwards
field,
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\sqlite3\schema.py", line 179, in add_fiel
d
self._remake_table(model, create_fields=[field])
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\sqlite3\schema.py", line 147, in _remake_
table
self.quote_name(model._meta.db_table),
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\base\schema.py", line 111, in execute
cursor.execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\utils.py", line 98, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\sqlite3\base.py", line 318, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: SolutionsForLanguagesApp_job__new.level_id may n
ot be NULL
显示迁移:
(venv) C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2>pyth
on manage.py showmigrations SolutionsForLanguagesApp
SolutionsForLanguagesApp
[X] 0001_initial
[X] 0002_auto_20160401_1234
[X] 0003_auto_20160402_0105
[X] 0004_auto_20160402_0107
[X] 0005_job_is_done
[X] 0006_auto_20160408_1506
[X] 0007_auto_20160411_1834
[X] 0008_auto_20160413_1413
[X] 0009_auto_20160413_1446
[X] 0010_auto_20160413_1543
[X] 0011_auto_20160413_1559
[X] 0012_auto_20160413_1604
[ ] 0013_auto_20160413_1615
[ ] 0014_auto_20160413_1616
[ ] 0015_auto_20160413_1616
[ ] 0016_remove_job_level
[ ] 0017_job_level
[ ] 0018_auto_20160413_1627
[ ] 0019_remove_job_level
迁移 0013:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
('SolutionsForLanguagesApp', '0012_auto_20160413_1604'),
]
operations = [
migrations.AddField(
model_name='job',
name='level',
field=models.ForeignKey(default=None, blank=True, to='SolutionsForLanguagesApp.Level'),
preserve_default=False,
),
migrations.AlterField(
model_name='job',
name='customer',
field=models.ForeignKey(related_name='orders', to=settings.AUTH_USER_MODEL, help_text='Z\xe1kazn\xedk'),
),
migrations.AlterField(
model_name='job',
name='file',
field=models.FileField(help_text='Upload file', null=True, upload_to=b'', blank=True),
),
migrations.AlterField(
model_name='job',
name='price',
field=models.FloatField(help_text='Cena', null=True, blank=True),
),
migrations.AlterField(
model_name='job',
name='translator',
field=models.ForeignKey(related_name='jobs', blank=True, to=settings.AUTH_USER_MODEL, help_text='Prekladate\u013e', null=True),
),
]
由于您还没有应用迁移 0013 到 0019,最简单的方法可能是删除这些文件,然后重新运行 makemigrations
(如果您使用的是版本控制,请签入文件副本或先备份)。
如果您需要更细粒度的控制,您可以编辑失败的 0013 迁移,并设置 null=True
以防止 IntegrityError
。
migrations.AddField(
model_name='job',
name='level',
field=models.ForeignKey(default=None, blank=True, null=True, to='SolutionsForLanguagesApp.Level'),
preserve_default=False,
我在我的模型中创建了一个新属性 level
。我忘了在迁移前把 null=True
放在那里。当 cmd 询问我是否要输入默认值时,我输入了 None
。现在,我做不到 migrate
。所以我尝试删除 level
列并创建新的 makemigrations
但是当我尝试调用 migrate
.
django.db.utils.IntegrityError: MyApp__job__new.level_id may not be NULL
有没有办法回到没有level
属性时的状态?
makemigrations:
Migrations for 'SolutionsForLanguagesApp':
0019_remove_job_level.py:
- Remove field level from job
迁移:
(venv) C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2>pyth
on manage.py migrate
Operations to perform:
Synchronize unmigrated apps: essay, true_false, super_inlines, staticfiles, mu
ltichoice, messages, quiz, django_tables2, crispy_forms
Apply all migrations: admin, contenttypes, SolutionsForLanguagesApp, auth, ses
sions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying SolutionsForLanguagesApp.0013_auto_20160413_1615...Traceback (most re
cent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\__init__.py", line 354, in execute_fr
om_command_line
utility.execute()
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\base.py", line 445, in execute
output = self.handle(*args, **options)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\core\management\commands\migrate.py", line 222, in ha
ndle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\executor.py", line 110, in migrate
self.apply_migration(states[migration], migration, fake=fake, fake_initial=f
ake_initial)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\executor.py", line 148, in apply_migrat
ion
state = migration.apply(state, schema_editor)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\migration.py", line 115, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, projec
t_state)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\migrations\operations\fields.py", line 62, in data
base_forwards
field,
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\sqlite3\schema.py", line 179, in add_fiel
d
self._remake_table(model, create_fields=[field])
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\sqlite3\schema.py", line 147, in _remake_
table
self.quote_name(model._meta.db_table),
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\base\schema.py", line 111, in execute
cursor.execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\utils.py", line 98, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2\ven
v\lib\site-packages\django\db\backends\sqlite3\base.py", line 318, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: SolutionsForLanguagesApp_job__new.level_id may n
ot be NULL
显示迁移:
(venv) C:\Users\Milano\PycharmProjects\FutileStudio\SolutionsForLanguages_2>pyth
on manage.py showmigrations SolutionsForLanguagesApp
SolutionsForLanguagesApp
[X] 0001_initial
[X] 0002_auto_20160401_1234
[X] 0003_auto_20160402_0105
[X] 0004_auto_20160402_0107
[X] 0005_job_is_done
[X] 0006_auto_20160408_1506
[X] 0007_auto_20160411_1834
[X] 0008_auto_20160413_1413
[X] 0009_auto_20160413_1446
[X] 0010_auto_20160413_1543
[X] 0011_auto_20160413_1559
[X] 0012_auto_20160413_1604
[ ] 0013_auto_20160413_1615
[ ] 0014_auto_20160413_1616
[ ] 0015_auto_20160413_1616
[ ] 0016_remove_job_level
[ ] 0017_job_level
[ ] 0018_auto_20160413_1627
[ ] 0019_remove_job_level
迁移 0013:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
('SolutionsForLanguagesApp', '0012_auto_20160413_1604'),
]
operations = [
migrations.AddField(
model_name='job',
name='level',
field=models.ForeignKey(default=None, blank=True, to='SolutionsForLanguagesApp.Level'),
preserve_default=False,
),
migrations.AlterField(
model_name='job',
name='customer',
field=models.ForeignKey(related_name='orders', to=settings.AUTH_USER_MODEL, help_text='Z\xe1kazn\xedk'),
),
migrations.AlterField(
model_name='job',
name='file',
field=models.FileField(help_text='Upload file', null=True, upload_to=b'', blank=True),
),
migrations.AlterField(
model_name='job',
name='price',
field=models.FloatField(help_text='Cena', null=True, blank=True),
),
migrations.AlterField(
model_name='job',
name='translator',
field=models.ForeignKey(related_name='jobs', blank=True, to=settings.AUTH_USER_MODEL, help_text='Prekladate\u013e', null=True),
),
]
由于您还没有应用迁移 0013 到 0019,最简单的方法可能是删除这些文件,然后重新运行 makemigrations
(如果您使用的是版本控制,请签入文件副本或先备份)。
如果您需要更细粒度的控制,您可以编辑失败的 0013 迁移,并设置 null=True
以防止 IntegrityError
。
migrations.AddField(
model_name='job',
name='level',
field=models.ForeignKey(default=None, blank=True, null=True, to='SolutionsForLanguagesApp.Level'),
preserve_default=False,