Se vuoi il after_homework campo per essere facoltativo, quindi dovresti usare null=True e blank=True .
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, null=True, blank=True)
Non vuoi primary_key=True per il after_homework - questo renderebbe il after_homework il campo della chiave primaria del VideoGamePurchase modello, che non ha senso se il campo è facoltativo.
Sembra che le tue migrazioni siano incasinate perché avevi primary_key=True per il after_homework campo prima. La soluzione più semplice sarebbe iniziare con un nuovo database, eliminare le migrazioni per quell'app, quindi eseguire nuovamente makemigrations e migrate . Questa volta, la migrazione creerà automaticamente un campo chiave primaria id per il VideoGamePurchase modello.