【问题标题】:How to resolve ID (Django ORM) that generates with SQL script on DB如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)
【发布时间】: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 这件事?

标签: python sql-server django django-models pymssql


【解决方案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),但我需要使用我的触发器来代替它。
猜你喜欢
  • 1970-01-01
  • 2013-10-26
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多