' NOT NULL约束失败'即使使用' null = True'

时间:2017-01-01 13:06:53

标签: python django django-models

我运行代码时看到此错误:

NOT NULL constraint failed: blog_post.category_id

以下是代码:

class Post(models.Model):
    class Meta:
        verbose_name='Запись'
        verbose_name_plural='Записи'

    author = models.ForeignKey('auth.User')
    category = models.ForeignKey('Theme', default=None, blank=True, null=True)
    title = models.CharField(max_length=200,verbose_name='Заголовок')
    text = RichTextField(verbose_name='Текст')
    created_date = models.DateTimeField(verbose_name='Время создания',default=timezone.now)
    published_date = models.DateTimeField(verbose_name='Время публикации',blank=True, null=True)


    def publish(self):
        self.published_date = timezone.now()
        self.save()
    def approved_commentimages(self):
        return self.comments.filter(approved_comment=True)

    def __str__(self):
        return self.title

class Theme(models.Model):
    class Meta:
        verbose_name='Категория'
        verbose_name_plural='Категории'

    title = models.CharField(verbose_name='Заголовок', max_length=40)
    slug = models.SlugField(verbose_name='Транслит', null=True)
    def __str__(self):
        return self.title

我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果删除或修改迁移文件,实际数据库可能与模型文件不同步,以及运行makemigrations时可能会发现没有检测到任何更改,即使文件与实际数据库。

您可以通过登录MySQL数据库并检查实际的空约束来验证这一点。您将看到它可能表示它不能为null,即使您的文件说它可以。

最简单的解决方案是创建一个新数据库并运行migrate。但是,如果数据库中已有大量数据并且想要避免创建新数据并迁移数据,则可以尝试再次手动将数据库与模型同步。