Ich möchte ein Modellobjekt wie Person erstellen, wenn die ID der Person nicht vorhanden ist, oder ich erhalte dieses Personenobjekt.
Der Code zum Erstellen einer neuen Person lautet wie folgt:
class Person(models.Model):
identifier = models.CharField(max_length = 10)
name = models.CharField(max_length = 20)
objects = PersonManager()
class PersonManager(models.Manager):
def create_person(self, identifier):
person = self.create(identifier = identifier)
return person
Aber ich weiß nicht, wo ich das vorhandene Personenobjekt überprüfen und erhalten soll.
python
django
django-models
user1687717
quelle
quelle
QuerySet
habenupdate_or_create
Es ist unklar, ob Ihre Frage nach der Methode get_or_create (verfügbar ab mindestens Django 1.3) oder der Methode update_or_create (neu in Django 1.7) fragt . Dies hängt davon ab, wie Sie das Benutzerobjekt aktualisieren möchten.
Die Verwendung der Beispiele ist wie folgt:
quelle
update_or_create
weil es für diesen Anwendungsfall besser ist, als das Objekt erneutget_or_create
aufzurufensave()
.Person.objects.get_or_create(a=a, b=b, c=c, defaults={"name": name})
defaults
Argument für diese Funktionen ist, wo Sie angeben, welche Felder dem Modell hinzugefügt werden sollen. Es hat nichts mit Standardeinstellungen zu tun, die in den Feldern Ihres Modells angegeben sindDjango hat Unterstützung dafür, überprüfen Sie get_or_create
quelle
Für nur eine kleine Anzahl von Objekten funktioniert update_or_create gut, aber wenn Sie eine große Sammlung bearbeiten , lässt es sich nicht gut skalieren. update_or_create führt immer zuerst ein SELECT und danach ein UPDATE aus.
Dies führt bestenfalls nur die erste Aktualisierungsabfrage aus, und nur wenn sie mit null Zeilen übereinstimmt, wird eine weitere INSERT-Abfrage ausgeführt. Dies erhöht Ihre Leistung erheblich, wenn Sie erwarten, dass die meisten Zeilen tatsächlich vorhanden sind.
Es hängt jedoch alles von Ihrem Anwendungsfall ab. Wenn Sie hauptsächlich Einfügungen erwarten, könnte der Befehl massiven_create () eine Option sein.
quelle
Ich dachte, ich würde eine Antwort hinzufügen, da Ihr Fragentitel so aussieht, als würde er fragen, wie er erstellt oder aktualisiert werden soll, anstatt wie im Fragetext beschrieben zu erhalten oder zu erstellen.
Wenn Sie ein Objekt erstellen oder aktualisieren wollten, weist die .save () -Methode dieses Verhalten standardmäßig bereits aus den Dokumenten auf :
Es ist erwähnenswert, dass sie sich im Wesentlichen auf den Fall beziehen, in dem die ID, die Sie dem Objekt gegeben haben, noch nicht in der Datenbank vorhanden ist, wenn sie sagen, dass das UPDATE nichts aktualisiert hat.
quelle
Wenn eine der Eingaben beim Erstellen ein Primärschlüssel ist, reicht dies aus:
Es wird automatisch aktualisiert, wenn zwei Daten mit demselben Primärschlüssel nicht zulässig sind.
quelle