Ich verwende Django 1.3 für eines meiner Projekte und muss die ID eines Datensatzes abrufen, der gerade in der Datenbank gespeichert wurde.
Ich habe so etwas wie den folgenden Code, um einen Datensatz in der Datenbank zu speichern:
n = MyData.objects.create(record_title=title, record_content=content)
n.save()
Die ID des Datensatzes hat gerade automatische Inkremente gespeichert. Gibt es eine Möglichkeit, diese ID abzurufen und an einer anderen Stelle in meinem Code zu verwenden?
django
django-views
Benutzerbild
quelle
quelle
n.save()
ist hier nicht erforderlich, daMyData.objects.create
die neue Instanz automatisch gespeichert wird.Antworten:
Verwenden Sie
n.id
nach dem Speichern.Siehe " Automatische Inkrementierung von Primärschlüsseln ".
quelle
n.pk
sein, wenn Sie selbst keinen Primärschlüssel hinzugefügt oder einen hinzugefügt und als ID bezeichnet haben.Es wäre
n.pk
.Um " Model.pk " zu zitieren :
quelle
.pk
wahrscheinlich als "Best Practice" angesehen wird, da es entweder auf die Standard-ID oder eine benutzerdefinierte ID verweist.Die ID wird in Ihrem Modell automatisch aktualisiert, sodass Sie sie unmittelbar nach Ihrer
n.save()
Zeile lesen könnenn.id
und sie wird ausgefüllt.quelle
Entfernen Sie save () und holen Sie sich pk direkt:
n = MyData.objects.create(record_title=title, record_content=content) n.pk
quelle
Ich hatte ein ähnliches Problem mit dem Zugriff auf die ID. In Django 3.0.5 habe ich auf diese Weise auf die ID zugegriffen. Anhand Ihres Beispiels und Variablennamens siehe unten:
instance = n.save() # return the id instance[0].id
Die obige Variable 'Instanz' ist eine Liste. Der Zugriff auf id in den oben beschriebenen Methoden gibt einen AttributeError ("Objekt hat kein Attribut 'id'") in Django 3 zurück.
Diese Antwort gilt bei Verwendung
modelformset_factory
. Dies gilt, wenn Sie eine Formularklasse aus einem Django-Modell erstellen, wie in den Django-Dokumenten beschriebenquelle
Wenn jemand diese Frage liest, haben Sie nach der Erstellung des Objekts immer noch Probleme, auf die ID zuzugreifen. Stellen Sie sicher, dass Sie
id
in Ihrem Modell keine Ganzzahl definieren . Es ist kostenlos in Django, so dass Sie die ID nicht schreiben oder verwenden könnenAutofield
#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...
Wenn Sie
id
als Ganzzahl definierenTestModel.objects.create(
oder mit,save()
wird None zurückgegeben.quelle