2017-01-01 92 views
0

我看到这个错误,当我运行我的代码:“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 

我是什么做的不对?

+0

[允许在用户的外键中允许空值。 Django](http://stackoverflow.com/questions/1812806/allow-null-in-foreign-key-to-user-django) –

+0

为了扩大这一点 - 你运行'makemigrations'和'migrate'为你做了这个改变后的应用程序? – Withnail

+0

是的,我在更改后使用迁移。这是错误发生在我尝试做的地方。 –

回答

0

如果您删除或修改迁移文件,您的实际数据库可能与您的模型文件不同步,并且在运行makemigrations时可能会说没有检测到更改,即使文件与实际数据库不同,也会发生这种情况。

您可以通过登录到您的MySQL数据库并检查实际的空约束来验证这一点。你会发现它可能会说它不能为空,即使你的文件说明它可以。

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

+2

这对你有帮助吗? –

相关问题