2012-03-30 12 views
77

siempre leí que debo utilizarDjango model manager objects.create ¿dónde está la documentación?

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

Pero Acabo de ver hay una función de gestor de crear, porque vi una aplicación de código abierto Django usarlo.

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

¿Se sugiere utilizarlo? O aún se prefiere usar el método .save. Supongo que objects.create intentará crearlo sin importar qué, mientras que save puede guardar un objeto existente si se especifica pk.

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

+11

¿por qué esta pregunta obtuvo un voto negativo? Acabo de llegar aquí con la misma pregunta y encontré esto útil. – Ferguzz

+4

Tampoco lo sé, tal vez la gente pensó que era estúpido y obvio. No me importa tanto: P recibí mi respuesta estoy feliz. También busqué sin resultado, así que pregunté. –

Respuesta

1

Básicamente, estos dos métodos son equivalent. El uso de Model.objects.create podría ser preferible ya que es más adecuado para el estilo de Django.

40
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) 

El 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 usted configura y si ese valor ya existe en la base de datos, una llamada a create() fallará con un IntegrityError dado que las claves primarias deben ser únicas. Prepárese para manejar la excepción si está usando teclas primarias manuales.

1

crear esencialmente hace lo mismo. a continuación está 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.

Cuestiones relacionadas