2015-07-25 6 views
6
Author.objects.create(name="Joe") 

oderWas ist der beste Weg, um ein Modellobjekt in Django zu erstellen?

an_author = Author(name="Joe") 
an_author.save() 

Was ist der Unterschied zwischen diesen beiden? Welcher ist besser?


ähnliche Fragen:
- difference between objects.create() and object.save() in django orm
- Django: Difference between save() and create() from transaction perspective

+0

mögliches Duplikat von [Django: Unterschied zwischen save() und create() aus Transaktionsperspektive] (http://stackoverflow.com/questions/4206819/django-difference-between-save-and-create-from-transaction -Perspektive) – ozgur

Antwort

1

Der erste mit dem Sie die Manager Methode create. Es ist bereits für Sie implementiert und wird automatisch gespeichert.

Die zweite Methode, die Sie eine Instanz der Klasse Author erstellen, dann rufen Sie speichern auf.

Also abschließend,

Author.objects.create(name="Joe") erstellen -> save()

die andere erste Zeile erstelle und zweite Zeile speichern.


In einigen Fällen müssen Sie die Managermethode immer aufrufen. Zum Beispiel müssen Sie das Passwort hashen.

# In here you are saving the un hashed password. 

user = User(username="John") 
user.password = "112233" 
user.save() 


# In here you are using the manager method, 
# which provide for you hashing before saving the password. 

user = User.objects.create_user(username="John", password="112233") 

Also im Grunde, in Ihren Modellen darüber als Setter denken. Wenn Sie die Daten während der Erstellung immer ändern möchten, verwenden Sie Manager.

5

create() ist wie ein Wrapper über save() Methode.

erstellen (** kwargs)

Eine bequeme Methode zum Erstellen eines Objekts und das alles in einem Schritt

Django 1.8 source code für create() Funktion zu speichern:

def create(self, **kwargs): 
     """ 
     Creates a new object with the given kwargs, saving it to the database 
     and returning the created object. 
     """ 
     obj = self.model(**kwargs) 
     self._for_write = True 
     obj.save(force_insert=True, using=self.db) # calls the `save()` method here 
     return obj 

Für create(), ein force_insert Parameter übergeben wird, während save() intern aufrufen, die der save() Methode erzwingt eine SQL INSERT führen und kein UPDATE zuführen. Es wird zwangsweise eine neue Zeile in die Datenbank einfügen.

Für save() entweder ein UPDATE oder INSERT wird abhängig von dem Primärschlüsselattributwert des Objekts durchgeführt werden.

3

Erstellen ist nur ein Convenience-Proxy zum Erstellen eines neuen Objekts mit Kwargs.Wie Sie unten sehen können, nennt es save() für Sie:

Von Django Source:

def create(self, **kwargs): 
     """ 
     Creates a new object with the given kwargs, saving it to the database 
     and returning the created object. 
     """ 
     obj = self.model(**kwargs) 
     self._for_write = True 
     obj.save(force_insert=True, using=self.db) 
     return obj 

Eine Sache zu bemerken, das force_insert Argument zu speichern. Das bedeutet, dass Django hier immer eine INSERT-SQL-Anweisung und keine UPDATE-Anweisung verwendet. Der Standardwert ist false. In Ihrem zweiten Beispiel wird also save() INSERT oder UPDATE.

Verwandte Themen