Ok donc j'ai déplacé l'import vers views.py (ou models.py et alors qu'il n'était importé qu'une seule fois, il était appelé deux fois.
Le problème était que le post_save signal était appelé lorsque l'objet a été créé et enregistré. Je ne sais pas pourquoi, alors j'ai ajouté une solution de contournement qui fonctionne maintenant
created = False
#Workaround to signal being emitted twice on create and save
if 'created' in kwargs:
if kwargs['created']:
created=True
#If signal is from object creation, return
if created:
return
Modifier :
post_save a été appelé deux fois parce que j'ai utilisé .create(...) qui équivaut à __init__(...) et .save() .
Conclusion
dispatch_uid fonctionne et faire des importations uniques est toujours une bonne pratique.