Pokud chcete after_homework být nepovinné, pak byste měli použít null=True a blank=True .
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, null=True, blank=True)
Nechcete primary_key=True pro after_homework - to by znamenalo after_homework pole primárního klíče VideoGamePurchase model, což nedává smysl, pokud je pole volitelné.
Zdá se, že vaše migrace jsou zpackané, protože jste měli primary_key=True pro after_homework pole dříve. Nejjednodušší opravou by bylo začít s novou databází, odstranit migrace pro danou aplikaci a poté znovu spustit makemigrations a migrate . Tentokrát migrace automaticky vytvoří pole primárního klíče id pro VideoGamePurchase model.