我被困住了。 Django 1.7,SQLite3。
我已更改模型以添加thumbnail
列,如this tutorial中所示。就是这样:
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
现在,即使将null=True
添加到thumbnail
中的models.py
行,运行makemigrations
也会成功,而migrate
也会失败。
我该怎么办?
答案 0 :(得分:14)
我的应用名称(使用python manage.py startapp
创建)称为articles
。在多次获得空约束错误后,这是新的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
我删除了除0001之外的所有000 *文件。
然后我跑了python manage.py makemigrations
和
python manage.py migrate
成功。
谢天谢地irc.freenode.net/django
。
答案 1 :(得分:0)
只需添加另一个解决方案。
就我而言,我如何创建BASE_DIR
是不正确的,因此DATABASES NAME
也是错误的。因此,它正在其他地方创建数据库。当我运行迁移时,它可能是抛出该错误的原因,因为那里存在一些旧数据库。因此,解决方法是只更正DATABASE
路径。