Django - post_init signal is called on Model instance save & before instance is even created. Why?
You seem to have a bit of confusion over what it means to instantiate an object. It has nothing whatever to do with the database. This instantiates a model object without saving it to the database, in which case its pk will be None:
MyObject(field1='foo', field2='bar')
and this (indirectly) instantiates an object by getting it from the database:
MyObject.objects.get(field1='baz')
The post_init
signal will be sent in both of these cases, even though neither of them has anything to do with saving to the database.
If you want something to happen when you save, either override the save
method itself, or use the pre_save
or post_save
signals. You can check there whether or not the object has been previously saved, by verifying if its pk
is None.