Ако искате after_homework полето да не е задължително, тогава трябва да използвате null=True и blank=True .
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, null=True, blank=True)
Не искате primary_key=True за after_homework - това би направило after_homework полето за първичен ключ на VideoGamePurchase модел, което няма смисъл, ако полето не е задължително.
Изглежда, че вашите миграции са объркани, защото сте имали primary_key=True за after_homework поле по-рано. Най-лесното решение би било да започнете с нова база данни, да изтриете миграциите за това приложение и след това да стартирате отново makemigrations и migrate . Този път миграцията автоматично ще създаде поле за първичен ключ id за VideoGamePurchase модел.