如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)
Posted
技术标签:
【中文标题】如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)【英文标题】:How to resolve ID (Django ORM) that generates with SQL script on DB 【发布时间】:2017-03-27 12:25:55 【问题描述】:Django ORM 无法解析在插入记录时使用特殊 SQL 触发器在 DB 中生成的 id。
当我保存没有 ID 的模型时,它会正确保存并在 DB 中有 ID?但是m.id
回复我None
。
class SomeModel(Model):
id = IntegerField(primary_key=True)
name = CharField(null=False, max=50)
m = SomeModel(name='asd')
m.save()
m.id # - None
保存后如何解析自动生成的 ID?或者我如何重写save()
方法?或者改变字段类型?
我需要使用自己的触发器而不是 IDENTITY
!
【问题讨论】:
为什么将id
字段定义为IntegerField?事实上,你为什么要定义它,而不是让 Django 自动定义呢?
@DanielRoseman 因为我需要知道 id 名称才能在迁移中使用它(添加触发器,生成 ID)
但是 Django 不知道你的触发器,所以它不知道该字段将由 db 填充。
@DanielRoseman 是的,我知道,我怎么能告诉 django 这件事?
【参考方案1】:
请阅读 Django 文档。默认情况下,你不需要告诉 Django 什么是主键。但如果你愿意的话。
class SomeModel(Model):
id = models.AutoField(primary_key=True, db_index=True)
name = CharField(null=False, max=50)
【讨论】:
AutoField 添加了 IDENTITY(1, 1),但我需要使用我的触发器来代替它。以上是关于如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?
我如何使用 CodeIgniter 执行 sql 脚本并将数据传递给它?