Django model manager objects.create ¿Dónde está la documentación?

85

Siempre leo que debería usar

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

Pero acabo de ver que hay una función de administrador para crear, porque vi una aplicación django de código abierto usándola.

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

Entonces, ¿se sugiere usarlo? ¿O todavía se prefiere utilizar el método .save? Supongo que objects.create intentará crearlo sin importar qué, mientras que save puede guardar un objeto existente si se especifica el pk.

Estos son los documentos que encontré: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects

Sam Stoelinga
fuente
11
¿Por qué se votó en contra de esta pregunta? Acabo de llegar aquí con la misma pregunta y encontré esto útil.
Ferguzz
4
Tampoco lo sabía, tal vez la gente pensó que era estúpido y obvio. No me importa tanto: P obtuve mi respuesta, estoy feliz. También busqué sin resultado, así que pregunté.
Sam Stoelinga

Respuestas:

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 que siempre se creará un nuevo objeto.
Normalmente no tendrá que preocuparse por esto. Sin embargo, si su modelo contiene un valor de clave primaria manual que estableció y si ese valor ya existe en la base de datos, una llamada a create () fallará con un IntegrityError ya que las claves primarias deben ser únicas. Esté preparado para manejar la excepción si está utilizando claves primarias manuales.

suhailvs
fuente
3

create esencialmente hace lo mismo. a continuación se muestra el código fuente para crear.

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 una instancia y luego la guarda.

rajesh.kanakabandi
fuente
1

Básicamente, estos dos métodos son equivalentes . Se Model.objects.createpodría preferir el uso de ya que se adapta más al estilo de Django.

Gajov
fuente