“NOT NULL约束失败”甚至“空=真”
问题描述:
我看到这个错误,当我运行我的代码:“NOT NULL约束失败”甚至“空=真”
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
我是什么做的不对?
答
如果您删除或修改迁移文件,您的实际数据库可能与您的模型文件不同步,并且在运行makemigrations
时可能会说没有检测到更改,即使文件与实际数据库不同,也会发生这种情况。
您可以通过登录到您的MySQL数据库并检查实际的空约束来验证这一点。你会发现它可能会说它不能为空,即使你的文件说明它可以。
最简单的解决方案是创建一个新的数据库并运行migrate
。但是,如果您的数据库中已有大量数据,并且希望避免创建新数据并迁移数据,则可以尝试再次手动将数据库与模型同步。
+2
这对你有帮助吗? –
[允许在用户的外键中允许空值。 Django](http://stackoverflow.com/questions/1812806/allow-null-in-foreign-key-to-user-django) –
为了扩大这一点 - 你运行'makemigrations'和'migrate'为你做了这个改变后的应用程序? – Withnail
是的,我在更改后使用迁移。这是错误发生在我尝试做的地方。 –