Django model manager objects.create onde está a documentação?

85

Eu sempre leio que devo usar

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

Mas acabei de ver que existe uma função de gerenciamento de criação, porque vi um aplicativo django de código aberto usando-a.

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

Então, é sugerido usá-lo? Ou ainda é preferível usar o método .save. Estou supondo que objects.create tentará criá-lo de qualquer maneira, enquanto save pode salvar um objeto existente se o pk for especificado.

Estes são os documentos que encontrei: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects

Sam Stoelinga
fonte
11
por que essa pergunta teve um voto negativo? Acabei de chegar aqui com a mesma pergunta e achei isso útil.
Ferguzz,
4
Eu também não sabia, talvez as pessoas pensassem que era estúpido e óbvio. Não me importo muito com isso: P eu recebi minha resposta, estou feliz. Eu também procurei sem resultado então perguntei.
Sam Stoelinga

Respostas:

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)

O force_insert significa que um novo objeto sempre será criado.
Normalmente você não precisa se preocupar com isso. No entanto, se seu modelo contém um valor de chave primária manual que você define e se esse valor já existe no banco de dados, uma chamada para create () falhará com um IntegrityError, pois as chaves primárias devem ser exclusivas. Esteja preparado para lidar com a exceção se estiver usando chaves primárias manuais.

Suhailvs
fonte
3

criar essencialmente faz o mesmo. abaixo está o código-fonte para criar.

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

ele cria uma instância e a salva.

rajesh.kanakabandi
fonte
1

Basicamente, esses dois métodos são equivalentes . O uso de Model.objects.createpode ser preferido, pois é mais adequado ao estilo do Django.

Gakhov
fonte