【问题标题】:Django says the "id may not be NULL" but why is it?Django 说“id 可能不是 NULL”,但为什么会这样呢?
【发布时间】:2010-03-29 14:43:55
【问题描述】:

我今天要疯了。我只是尝试插入一条新记录,但它返回了“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

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

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    我能想到的唯一一件事是表架构已经与模型不同步,因为有人从表的 PK 中删除了AUTOINCREMENT 属性。

    【讨论】:

    • 我不得不说,鉴于这是在我的代码之外发生的错误,这是完全有可能的,但我该如何检查是否是这种情况以及如何修复它?
    • 您将使用数据库工具检查表的属性,并执行ALTER TABLE 查询以重新添加约束。有关详细信息,请参阅相关的 DB 文档。
    • 我采用了一种风险更大的 manage.py 方法:dumpdata post > post.jsonreset postloaddata post.json.. 仍在检查以确保它没有破坏任何东西。
    • 我花了 4 个小时才找到问题的根源。你的解决方案是正确的。只需将 SQLite 字段类型更改为“INTEGER PRIMARY KEY”即可修复。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2021-04-25
      • 2011-08-14
      • 2019-06-22
      • 1970-01-01
      • 2015-03-26
      相关资源
      最近更新 更多