Django makemigrations工作,迁移失败"django.db.utils.IntegrityError:NOT NULL约束失败"

ali*_*ind 7 python sqlite django

我被卡住了.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
Run Code Online (Sandbox Code Playgroud)

现在是这样的:

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
Run Code Online (Sandbox Code Playgroud)

我将所有数据备份到json文本文件中

python manage.py dumpdata article --indent=4 > article.json
Run Code Online (Sandbox Code Playgroud)

然后执行

python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

哪个有效.但

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

失败了

django.db.utils.IntegrityError: NOT NULL constraint failed: article_article__new.thumbnail

现在,即使添加null=Truethumbnail线路后models.py,运行makemigrations成功,并migrate以同样的方式失败.

我该怎么办?

ali*_*ind 14

我的应用名称(创建时python manage.py startapp)被调用articles.在articles\migrations多次获得null-constraint错误之后,这是新文件夹:

__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
Run Code Online (Sandbox Code Playgroud)

我删除了除0001之外的所有000*文件.

然后我跑了

python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

python manage.py migrate
Run Code Online (Sandbox Code Playgroud)

成功.

谢天谢地irc.freenode.net/django.

  • 我不知道这是如何回答这个问题的. (9认同)