【问题标题】:Django: pkey is none after savingDjango:保存后pkey没有
【发布时间】:2010-08-26 16:49:23
【问题描述】:

我的 Django/PostgreSQL 系统有一个奇怪的行为。

保存模型对象后,虽然它是一个 AutoField 并且 id 已正确保存在数据库中,但主键是 none。

以下脚本段落为 id 返回 None:

a = SomModelClass()
a.someattribute = 'xyz'
a.save()
a.someattribute
>>> 'xyz'
a.id
>>> None

模型类看起来像这样:

class SomeModelClass(models.Model):
    id = models.AutoField(db_column = 'id', primary_key = True)
    someattribute = models.CharField(db_column = 'someattribute', max_length = 200)

此行为仅在此模型上发生;所有其他型号都可以正常工作。

在不改变模型结构的情况下有一天出现了问题。

也许数据库的数据完整性有问题?使用另一个数据库服务器就可以了。

最好的问候!

【问题讨论】:

    标签: django postgresql django-models


    【解决方案1】:

    我现在解决了这个问题。序列和序列列之间的关系不知何故被破坏了。一个简单的

    ALTER SEQUENCE <<sequence_name>> OWNED_BY <<table_name>>.<<pk_column_name>> 
    

    解决了问题。

    最好的问候!

    【讨论】:

    • OWNED_BY 必须是 OWNED BY(无下划线)
    【解决方案2】:

    你能检查你的 Postgresql 日志并找出正在触发的查询吗?这可能会提供一些线索。还要编写一个快速的单元测试来运行相同的代码,看看它是否有效。

    【讨论】:

    • 您好,感谢您的回答!我检查了查询并隔离了问题。以下查询不返回任何值:SELECT CURRVAL(pg_get_serial_sequence('>','id'))
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多