Cuál es la diferencia entre ejecutar dos comandos:
foo = FooModel()y
bar = BarModel.objects.create()¿El segundo crea inmediatamente un BarModelen la base de datos, mientras que para FooModelel 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 estoycreateteniendo resultados inesperadosCharFieldincluso si se establece ennull=Falseno 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écnicamentenullobj = 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.5puede 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) :modelssome_test.py-object.createsome_test.py-Constructor()fuente