Cuál es la diferencia entre ejecutar dos comandos:
foo = FooModel()
y
bar = BarModel.objects.create()
¿El segundo crea inmediatamente un BarModel
en la base de datos, mientras que para FooModel
el save()
método debe llamarse explícitamente para agregarlo a la base de datos?
python
django
database
django-models
0 pierna
fuente
fuente
Respuestas:
https://docs.djangoproject.com/en/stable/topics/db/queries/#creating-objects
fuente
Las dos sintaxis no son equivalentes y pueden provocar errores inesperados. Aquí hay un ejemplo simple que muestra las diferencias. Si tienes un modelo:
Y creas un primer objeto:
Luego intenta crear un objeto con la misma clave primaria:
fuente
.create()
crea un objeto incluso si falta un campo requerido (null=False
)? Estoy agregando pruebas a mi proyecto y estoycreate
teniendo resultados inesperadosCharField
incluso si se establece ennull=False
no generará un error si no se proporciona: esto se debe a que Django establece las cadenas de forma predeterminada en una cadena vacía,""
por lo que no es técnicamentenull
obj = MyModel()
, entoncesobj.full_clean()
por ahora.ACTUALIZACIÓN 15.3.2017:
He abierto un problema de Django sobre esto y parece ser aceptado preliminarmente aquí: https://code.djangoproject.com/ticket/27825
Mi experiencia es que cuando se usa la clase
Constructor
(ORM
) por referencias con Django1.10.5
puede haber algunas inconsistencias en los datos (es decir, los atributos del objeto creado pueden obtener el tipo de los datos de entrada en lugar del tipo fundido de la propiedad del objeto ORM) :models
some_test.py
-object.create
some_test.py
-Constructor()
fuente