Le problème est la migration de Process.milestone en tant que champ booléen vers Process.milestone en tant que clé étrangère. Postgres n'attend pas qu'une migration échoue sur des données non castables. Il veut une règle pour modifier la table à l'avance.
Si vous n'envisagez aucune sorte de migration de données entre deux champs, l'option la plus simple consiste simplement à supprimer et à ajouter le champ. Dans ce cas précis, cela reviendrait à modifier les opérations comme suit :
operations = [
migrations.RemoveField(
model_name='process',
name='milestone'
),
migrations.AddField(
model_name='process',
name='milestone',
field=models.ForeignKey(to='processes.Milestone'),
),
migrations.AlterModelOptions(
name='process',
options={'ordering': ['milestone', 'sequence'], 'verbose_name_plural': 'processes'},
)
]