Die Prüfung auf self.pk == None
ist nicht ausreichend , um zu bestimmen , ob das Objekt wird in der Datenbank eingefügt oder aktualisiert werden.
Das Django O / RM verfügt über einen besonders bösen Hack, bei dem im Grunde genommen überprüft wird, ob sich etwas an der PK-Position befindet, und wenn ja, ein UPDATE durchgeführt wird, andernfalls ein INSERT (dies wird zu einem INSERT optimiert, wenn die PK None ist).
Der Grund dafür ist, dass Sie die PK festlegen dürfen, wenn ein Objekt erstellt wird. Obwohl dies nicht üblich ist, wenn Sie eine Sequenzspalte für den Primärschlüssel haben, gilt dies nicht für andere Arten von Primärschlüsselfeldern.
Wenn Sie wirklich wissen wollen, müssen Sie das tun, was der O / RM tut, und in der Datenbank suchen.
Natürlich haben Sie einen bestimmten Fall in Ihrem Code und dafür ist es sehr wahrscheinlich, self.pk == None
dass er Ihnen alles sagt, was Sie wissen müssen, aber es ist keine allgemeine Lösung.
UUIDField pk