web-dev-qa-db-fra.com

différence entre objects.create () et object.save () dans Django orm

u = UserDetails.objects.create(first_name='jake',last_name='sullivan')
u.save()

UserDetails.objects.create() et u.save() exécutent toutes deux la même fonction save(). Quelle est la différence? Y a-t-il un contrôle ou un avantage supplémentaire à utiliser create() vs save()?

Questions similaires:
- Quelle est la meilleure façon de créer un objet modèle dans Django?
- Django: différence entre save () et create () du point de vue des transactions

39
jacquel

La documentation Django dit que c'est la même chose . Il est juste plus pratique de faire Vous pouvez également créer une save() sur une seule ligne, mais ce serait plus détaillé et moins lisible - il est clair que vous créez un nouvel objet avec la fonction create() méthode.

create(**kwargs)

Une méthode pratique pour créer un objet et l'enregistrer en une seule étape. Ainsi:

p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

et:

p = Person(first_name="Bruce", last_name="Springsteen")
p.save(force_insert=True)

sont équivalents.

Le paramètre force_insert Est documenté ailleurs, mais cela signifie simplement qu'un nouvel objet sera toujours créé. Normalement, vous n'aurez pas à vous en préoccuper. Cependant, si votre modèle contient une valeur de clé primaire manuelle que vous définissez et si cette valeur existe déjà dans la base de données, un appel à create() échouera avec un IntegrityError car les clés primaires doivent être uniques . Soyez prêt à gérer l'exception si vous utilisez des clés primaires manuelles.

59
Maxime Lorant