Ok, więc przeniosłem import do views.py (lub models.py i chociaż importowano go tylko raz, wywoływano go dwukrotnie.
Problem polegał na tym, że post_save sygnał był wywoływany, gdy obiekt został utworzony, a także zapisany. Nie mam pojęcia dlaczego, więc dodałem obejście, które teraz działa
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
Edycja:
post_save został wywołany dwukrotnie, ponieważ użyłem .create(...) co jest równoważne z __init__(...) i .save() .
Wniosek
dispatch_uid działa, a wykonywanie pojedynczych importów jest nadal dobrą praktyką.