Nếu bạn muốn after_homework là trường tùy chọn, sau đó bạn nên sử dụng null=True và blank=True .
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, null=True, blank=True)
Bạn không muốn primary_key=True cho after_homework - điều đó sẽ làm cho after_homework trường khóa chính của VideoGamePurchase mô hình, không có ý nghĩa nếu trường là tùy chọn.
Có vẻ như quá trình di chuyển của bạn bị rối vì bạn có primary_key=True cho after_homework trường trước đó. Cách khắc phục đơn giản nhất là bắt đầu với cơ sở dữ liệu mới, xóa các di chuyển cho ứng dụng đó, sau đó chạy lại makemigrations và migrate . Lần này, quá trình di chuyển sẽ tự động tạo ra trường khóa chính id cho VideoGamePurchase mô hình.