Django model manager objects.create dov'è la documentazione?


86

Ho sempre letto che dovrei usare

model = Model(a=5, b=6)
model.save()

Ma ho appena visto che esiste una funzione di gestione create, perché ho visto un'app per django opensource che la utilizza.

model = Model.objects.create(a=5, b=6)
print model.pk
1

Quindi si suggerisce di usarlo? O è ancora preferibile utilizzare il metodo .save. Immagino che objects.create proverà a crearlo indipendentemente da cosa, mentre save potrebbe salvare un oggetto esistente se il pk è specificato.

Questi sono i documenti che ho trovato: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


11
perché questa domanda ha ottenuto un voto negativo? Sono appena arrivato qui con la stessa domanda e l'ho trovato utile.
Ferguzz

4
Inoltre non lo sapevo, forse la gente pensava che fosse stupido e ovvio. Non me ne importa così tanto: P ho ricevuto la mia risposta sono felice. Ho anche cercato senza risultati, quindi ho chiesto.
Sam Stoelinga

Risposte:



44
p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

equivalente a:

p = Person(first_name="Bruce", last_name="Springsteen") 
p.save(force_insert=True)

Force_insert significa che verrà sempre creato un nuovo oggetto.
Normalmente non dovrai preoccuparti di questo. Tuttavia, se il modello contiene un valore di chiave primaria manuale impostato e se quel valore esiste già nel database, una chiamata a create () fallirà con un IntegrityError poiché le chiavi primarie devono essere univoche. Preparati a gestire l'eccezione se utilizzi chiavi primarie manuali.


3

creare essenzialmente fa lo stesso. di seguito è riportato il codice sorgente per create.

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

crea un'istanza e quindi la salva.


1

Fondamentalmente, questi due metodi sono equivalenti . L'utilizzo di Model.objects.createpotrebbe essere preferito poiché è più adatto allo stile di Django.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.