我为我的一个项目使用Django 1.3,我需要获取刚刚保存在数据库中的记录的ID。
我有类似下面的代码,可以将记录保存到数据库中:
n = MyData.objects.create(record_title=title, record_content=content)
n.save()
记录的ID刚刚保存了自动递增。有没有办法获取该ID并在我的代码中的其他地方使用它?
我为我的一个项目使用Django 1.3,我需要获取刚刚保存在数据库中的记录的ID。
我有类似下面的代码,可以将记录保存到数据库中:
n = MyData.objects.create(record_title=title, record_content=content)
n.save()
记录的ID刚刚保存了自动递增。有没有办法获取该ID并在我的代码中的其他地方使用它?
Answers:
n.id
保存后使用。
请参阅“自动递增主键”。
n.pk
因为只有当您自己没有添加主键或添加一个主键并将其命名为id时,它才会是id。
会的n.pk
。
引用“ Model.pk ”:
无论您是自己定义一个主键字段,还是让Django为您提供一个主键字段,每个模型都将具有一个称为pk的属性。它的行为类似于模型上的常规属性,但实际上是该模型的主键字段的别名。您可以像读取其他任何属性一样读取和设置此值,它将更新模型中的正确字段。
.pk
可能被认为是“最佳实践”,因为它引用了默认ID或自定义ID。
如果有人读了这个问题,其余的答案您在创建对象后仍无法访问id。确保id
在模型中未将其定义为Integer。它在Django中是免费的,因此您无法编写ID或使用Autofield
#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...
如果确实定义id
为Integer,则TestModel.objects.create(
使用withsave()
将返回None。
n.save()
这里是不必要的,因为会MyData.objects.create
自动保存新实例。