Django makemigrations成功,但迁移失败,提示"django.db.utils.IntegrityError: NOT NULL约束失败
我遇到麻烦了。使用的是Django 1.7和SQLite3。
我在模型中添加了一个叫做 thumbnail
的列,参考了这个教程。之前是这样的:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
pub_date = models.DateTimeField('date published')
likes = models.IntegerField(default=0)
def __str__(self):
return self.title
现在变成这样:
from django.db import models
from time import time
def get_upload_file_name(instance, filename):
return "uploaded_files/%s_%s" % (str(time()).replace(".", "_"), filename)
class Article(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
pub_date = models.DateTimeField('date published')
likes = models.IntegerField(default=0)
thumbnail = models.FileField(upload_to=get_upload_file_name, null=True)
def __str__(self):
return self.title
我把所有数据备份到了一个json文本文件中,使用了
python manage.py dumpdata article --indent=4 > article.json
然后执行了
python manage.py makemigrations
这个命令,结果是成功了。但是
python manage.py migrate
却出现了错误:
django.db.utils.IntegrityError: NOT NULL constraint failed: article_article__new.thumbnail
现在,即使我在 models.py
中的 thumbnail
行添加了 null=True
,运行 makemigrations
是成功的,但 migrate
还是同样失败。
我该怎么办?
2 个回答
0
我再补充一个解决方案。
在我的情况下,我创建 BASE_DIR
的方式不对,所以 DATABASES NAME
也出错了。这样一来,数据库就被创建在了其他地方。当我运行迁移时,就出现了错误,可能是因为那里已经存在一个旧的数据库。所以解决办法就是把 DATABASE
的路径修正过来。
14
我创建的应用名字是 articles
,是用 python manage.py startapp
命令生成的。这里是新的 articles\migrations
文件夹,之前我遇到了好几次空值约束错误:
__init__.py
0001_initial.py
0002_auto_20140803_1540.py
0003_auto_20140803_1542.py
0004_auto_20140803_1450.py
0005_auto_20140803_1552.py
__pycache__
__init__.cpython-34.pyc
0001_initial.cpython-34.pyc
0002_auto_20140803_1540.cpython-34.pyc
0003_auto_20140803_1542.cpython-34.pyc
0004_auto_20140803_1450.cpython-34.pyc
0005_auto_20140803_1552.cpython-34.pyc
我删除了两个目录下所有以 000 开头的文件,除了 0001。
然后我运行了
python manage.py makemigrations
和
python manage.py migrate
成功了。
真是太感谢 irc.freenode.net/django
了。