如何获取刚刚保存的记录的ID

ava*_*tar 65 django django-views

我正在为我的一个项目使用Django 1.3,我需要获取刚保存在数据库中的记录的ID.

我有类似下面的代码来保存数据库中的记录:

n = MyData.objects.create(record_title=title, record_content=content)
n.save()
Run Code Online (Sandbox Code Playgroud)

记录的ID刚刚保存了自动增量.有没有办法获取该ID并在我的代码中的其他地方使用它?

Jam*_*esO 101

n.id保存后使用.

请参阅" 自动递增主键 ".

  • 当我在视图中使用表单保存数据时,如何访问仅由 froms 对象保存的 id? (2认同)
  • 它应该是`n.pk`,因为只有当你自己没有添加主键或添加一个并将其命名为id时,它才会是id。 (2认同)

Dav*_*cic 51

会的n.pk.

引用" Model.pk ":

无论您是自己定义主键字段,还是让Django为您提供一个,每个模型都有一个名为pk的属性.它的行为类似于模型上的普通属性,但实际上是属于模型主键字段的属性的别名.您可以像读取任何其他属性一样读取和设置此值,它将更新模型中的正确字段.

  • 很好找.这表明调用`.pk`可能被认为是"最佳实践",因为它引用了默认id或自定义id. (4认同)

小智 11

去掉save(),直接获取pk:

n = MyData.objects.create(record_title=title, record_content=content)
n.pk
Run Code Online (Sandbox Code Playgroud)


And*_*son 7

该ID将在您的模型中自动更新,因此n.save()您可以在线后立即阅读n.id并填充该ID .


Raú*_*tín 7

如果有人阅读此问题并检查其他答案后,在创建对象后访问 id 时仍然存在问题。确保您没有id在模型中定义为整数。如果您决定无论如何都要声明它,请使用Autofield 但不需要,它是免费的models.Model

#No
class TestModel(models.Model):
    id = models.IntegerField(primary_key=True)
    something...


#Ok
class TestModel(models.Model):
    id = models.AutoField(primary_key=True)
    something...

#Ok
class TestModel(models.Model):
    something...
Run Code Online (Sandbox Code Playgroud)

如果您确实定义id为 Integer,TestModel.objects.create(或 withsave()将返回 None。