Bien, moví la importación a views.py
(o models.py
y mientras se importaba solo una vez, se llamaba dos veces.
El problema era que post_save
se estaba llamando a la señal cuando el objeto se creó y se guardó. No tengo idea de por qué, así que agregué una solución que ahora funciona
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
Editar:
post_save
Me llamaron dos veces porque usé .create(...)
que es equivalente a __init__(...)
y .save()
.
Conclusión
dispatch_uid
funciona y hacer importaciones individuales sigue siendo una buena práctica.