CASCADE не работает так. В вашем случае, с CASCADE, с двумя проектами A и B, задание J_DAILY, связанное с обоими проектами, если вы удалите проект A, то J_DAILY также будет удалено.
Если вы хотите, чтобы ваша работа "дожила до его последний проект ". Вам следует изменить on_delete
на DO_NOTHING
и добавить проверку на удаление проектов.
@receiver(pre_delete, sender=Project)
def delete_related_jobs(sender, instance, **kwargs):
for job in instance.job_set.all():
# No remaining projects
if not job.projects.exclude(id=instance.id).count():
job.delete()