Django错误 OperationalError: no such column: xxx

模型前后操作如下:

第一次迁移:

class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=True)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
    style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)

更改后:

class Snippet(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=True)
    language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100)
    style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100)
    owner = models.ForeignKey('auth.User', related_name='snippets', on_delete=models.CASCADE)
    highlighted = models.TextField()

Djnago修改数据库分以下三步:

1、对models.py进行更改(正常)

2、使用makemigrations创建迁移

3、使用migrate执行迁移

分析:在该修改后模型后,第二次同步数据库时code和highlighted字段不能为空。如果第一次就创建highlighted字段,则无影响,因为该表没有现有的行。如果数据表第一次已经创建并且已经在表插入数据,则必须定义一个默认值来填充已有的行, 否则数据库会因为违反数据的完整性而不接受数据表更改。

解决方法:改为

code = models.TextField(default ='')

highlighted = models.TextField(default ='')

原文地址:https://www.cnblogs.com/delav/p/9651495.html