Estoy usando Django 1.3 para uno de mis proyectos y necesito obtener el ID de un registro que acabo de guardar en la base de datos.
Tengo algo como el siguiente código para guardar un registro en la base de datos:
n = MyData.objects.create(record_title=title, record_content=content)
n.save()
El ID del registro que acaba de guardar incrementos automáticos. ¿Hay alguna forma de obtener esa identificación y usarla en otro lugar de mi código?
django
django-views
avatar
fuente
fuente

n.save()es innecesaria aquí, ya queMyData.objects.createguarda automáticamente la nueva instancia.Respuestas:
Usar
n.iddespués de guardar.Consulte " Claves primarias de incremento automático ".
fuente
n.pkya que será id solo si no agregó una clave principal usted mismo, o agregó una y la nombró id.Lo sería
n.pk.Para citar " Model.pk ":
fuente
.pkprobablemente se considera la "mejor práctica", ya que hace referencia a la identificación predeterminada o personalizada.La identificación se actualizará automáticamente en su modelo, por lo que inmediatamente después de su
n.save()línea puede leern.idy se completará.fuente
Elimine save () y obtenga pk directamente:
n = MyData.objects.create(record_title=title, record_content=content) n.pkfuente
Tuve un problema similar al acceder a la identificación. En Django 3.0.5, así es como accedí al id. Usando su ejemplo y nombre de variable, vea a continuación:
instance = n.save() # return the id instance[0].idLa variable 'instancia' de arriba es una lista. Acceder a id en los métodos descritos anteriormente devuelve un AttributeError ("el objeto no tiene atributo 'id'") en Django 3.
Esta respuesta se aplica cuando se usa
modelformset_factory. Esto es cierto cuando se crea una clase Form a partir de un modelo de Django como se describe en los documentos de Django.fuente
Si alguien lee esta pregunta, el resto de las respuestas todavía tiene problemas para acceder a la identificación después de la creación del objeto. Asegúrese de no definir
idcomo un número entero en su modelo. Es gratis en Django por lo que no puede escribir la identificación o usarAutofield#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...si lo define
idcomo Integer,TestModel.objects.create(o consave()devolverá None.fuente