Python Django说;id不能为空";但为什么呢?

Python Django说;id不能为空";但为什么呢?,python,django,django-models,Python,Django,Django Models,我今天快疯了。我刚刚尝试插入一条新记录,它抛出了一个“post_blogpost.id可能不为NULL”错误。这是我的模型: class BlogPost(models.Model): title = models.CharField(max_length=100) slug = models.SlugField(max_length=100) who = models.ForeignKey(User, default=1) when =

我今天快疯了。我刚刚尝试插入一条新记录,它抛出了一个“post_blogpost.id可能不为NULL”错误。这是我的模型:

class BlogPost(models.Model):
    title   = models.CharField(max_length=100)
    slug    = models.SlugField(max_length=100)
    who     = models.ForeignKey(User, default=1)
    when    = models.DateTimeField()

    intro   = models.TextField(blank=True, null=True)
    content = models.TextField(blank=True, null=True)

    counter = models.PositiveIntegerField(default=0)

    published = models.BooleanField(default=False)
    css = models.TextField(blank=True, null=True)

    class Meta:
        ordering = ('-when', 'id')
模型下也有许多函数,但我这里不完整地介绍它们。它们的名称是:
content\u cache\u key
clear\u cache
\u unicode\u
reads
processed\u content


我正在通过管理员添加。。。我的头发快用完了。

我能想到的唯一一件事是,由于有人从表的主键中删除了
AUTOINCREMENT
属性,表架构与模型失去了同步。

我在管理中也遇到了奇怪的编辑结果。通常它们与外键有关。当编辑页面在一个页面上有一堆空的模型实例,这样您就可以通过填写它们来轻松创建新的模型实例时,有时我会设法做一些错误的事情,以便尝试保存空实例。也许这适用于你

您可以验证这在shell中是否可以自行添加

$ python manage.py shell
>>> from models import *
>>> b = BlogPost(title='Hello', slug='hello')
>>> b.save()

我必须说,鉴于这是一个发生在我的代码之外的错误,这是完全可能的,但我如何检查是否是这种情况,以及如何着手解决它?您将使用数据库工具检查表的属性,并执行
ALTER table
查询以重新添加约束。有关详细信息,请参阅相关的DB文档。我使用了一种风险更高的manage.py方法:
dumpdata post>post.json
reset post
loaddata post.json
。。仍在检查以确保它没有核武器。我花了4个小时才找到问题的根源。你的答案是正确的。只需将SQLite字段类型更改为“INTEGER主键”,它就被修复了。