Django说“id可能不能为空”,但为什么呢?

4 投票
2 回答
6302 浏览
提问于 2025-04-15 20:59

今天我快要疯了。我刚试着插入一条新记录,结果出现了一个错误:“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_cache_keyclear_cache__unicode__readsreadprocessed_content

我是在后台添加的... 我快要抓狂了。

2 个回答

1

我也遇到过在管理后台编辑时出现奇怪的结果。通常这些问题和外键有关。当编辑页面上有很多空的模型实例时,你可以通过填写这些空实例来轻松创建新的。有时候我会搞错,导致系统试图保存这些空的实例。也许你遇到的情况和这个类似。

你可以在命令行中验证一下,这样添加是没问题的。

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

我能想到的唯一原因就是,表的结构和模型之间出现了不同步的情况,可能是因为有人把表中主键的AUTOINCREMENT属性给删掉了。

撰写回答