Jeśli chcesz wykonać after_homework pole ma być opcjonalne, należy użyć null=True i blank=True .
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, null=True, blank=True)
Nie chcesz, aby primary_key=True za after_homework - to sprawiłoby, że after_homework pole klucza podstawowego VideoGamePurchase model, co nie ma sensu, jeśli pole jest opcjonalne.
Wygląda na to, że Twoje migracje są pomieszane, ponieważ masz primary_key=True za after_homework pole wcześniej. Najłatwiejszą poprawką byłoby rozpoczęcie od nowej bazy danych, usunięcie migracji dla tej aplikacji, a następnie ponowne uruchomienie makemigrations i migrate . Tym razem migracja automatycznie utworzy pole klucza podstawowego id dla VideoGamePurchase model.