Django - Ограничение FOREIGN KEY не сработало

В этой части кода для синхронизации листа excel с базой данных:


        for record in lesson_records:
            try:
                date = parser.parse(record['Date']).date()
                start_time = parser.parse(record['Start Time']).time()
                end_time = parser.parse(record['End Time']).time()

                primary_tutor = get_object_or_404(Staff, gmail=record['Primary Tutor Email'])
                logger.info(primary_tutor)
                course = get_object_or_404(Course, course_code=record['Course Code'])
                logger.info(course)

                lesson, created = Lesson.objects.update_or_create(
                    lesson_code=record['Lesson Code'],
                    defaults={
                        'course_code': course,
                        'date': date,
                        'start_time': start_time,
                        'end_time': end_time,
                        'lesson_no': record['Lesson Number'],
                        'school': record['School / Customer'],
                        'teacher': record['Teacher'],
                        'teacher_contact': record['Teacher Contact'],
                        'venue': record['Venue'],
                        'remarks': record['Remark'],
                        'delivery_format': record['Delivery Format'],
                        'primary_tutor': primary_tutor
                    }
                )

                logger.info(record['Lesson Code'])
            except Exception as e:
                lesson_errors.append(f"Error in Lesson {record['Lesson Code']}: {str(e)}")
                logger.error(f"Error in {record['Lesson Code']}: {str(e)}")

Я получаю Error in [course code]: FOREIGN KEY constraint failed за каждый курс.

И primary_tutor, и course корректно регистрируются, поэтому оба get_object_or_404 успешно работают и оба существуют в базе данных, но ограничение внешнего ключа все равно не работает.

Это модель:

class Lesson(models.Model):
    course_code = models.ForeignKey(Course, on_delete=models.CASCADE)
    date = models.DateField()
    start_time = models.TimeField()
    end_time = models.TimeField()
    lesson_no = models.IntegerField()
    lesson_code = models.CharField(max_length=20, primary_key=True)
    school = models.CharField(max_length=100)
    teacher = models.CharField(max_length=10)
    teacher_contact = models.CharField(max_length=100)
    teacher_email = models.EmailField(blank=True, null=True)
    venue = models.CharField(max_length=100)
    remarks = models.TextField(blank=True, null=True)
    delivery_format = models.CharField(max_length=10)
    primary_tutor = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name='primary_tutor')
    other_tutors = models.ManyToManyField(Staff)
    calender_id = models.CharField(max_length=100, blank=True, null=True)
    change = models.BooleanField(default=False)

Я уже сбросил базу данных и сделал makemigrations и migrate снова, все равно не работает.

По умолчанию Django создает файлы миграции в алфавитном порядке имен моделей. В вашем случае это будет порядок : Курс, Урок и затем Персонал. Но когда он пытается создать отношение к таблице appname_staff при создании миграции для модели Lesson, он терпит неудачу, потому что таблицы с таким именем не существует. Поэтому я рекомендую вам сначала закомментировать поля, в которых вы связываетесь с моделью материала, а затем сделать миграцию. После этого вы должны откомментировать эти строки и сделать миграцию с отношениями к EXISTING таблице.

Вернуться на верх