Le chèque de self.pk == None
es no suffisante pour déterminer si l'objet va être inséré ou mis à jour dans la base de données.
L'O/RM de Django comporte un hack particulièrement méchant qui consiste essentiellement à vérifier s'il y a quelque chose à la position PK et, si c'est le cas, à faire un UPDATE, sinon à faire un INSERT (ceci est optimisé pour un INSERT si le PK est None).
La raison pour laquelle il doit faire cela est que vous êtes autorisé à définir le PK lorsqu'un objet est créé. Bien que cela ne soit pas courant lorsque vous avez une colonne de séquence pour la clé primaire, cela ne vaut pas pour les autres types de champs de clé primaire.
Si vous voulez vraiment savoir, vous devez faire ce que l'O/RM fait et regarder dans la base de données.
Bien sûr, vous avez un cas spécifique dans votre code et pour cela il est fort probable que self.pk == None
vous dit tout ce que vous devez savoir, mais il est no une solution générale.
1 votes
Veuillez sélectionner stackoverflow.com/a/35647389/8893667 comme réponse correcte. La réponse ne fonctionne pas dans de nombreux cas comme un
UUIDField pk