ValueError при использовании Django Model для импорта данных из файла в унаследованную базу данных

Я хотел бы использовать модели Django для импорта данных из вновь поступающих файлов в унаследованную базу данных. Это должно происходить в фоновом режиме каждый раз, когда пользователь открывает главную страницу моего приложения. К сожалению, я столкнулся с ошибкой "ValueError: Cannot assign "'Student_2": "Exam.student_id" должен быть экземпляром "Student"."
. Я знаю, что есть много вопросов о том, как решить эту ошибку, но я все еще не могу понять, как решить ее в моем случае. Я не имею права менять что-либо в унаследованной базе данных и не имею никакого влияния на формат новых файлов.

Вот как выглядит моя база данных:
enter image description here

Вот некоторые примеры данных:
enter image description here

Вот как выглядит файл с новыми данными:
enter image description here

Вот как выглядят мои модели:

class School(models.Model):
    school_id = models.CharField(primary_key=True, max_length=100)

    class Meta:
        managed = False
        db_table = 'school'

class Student(models.Model):
    student_id = models.CharField(primary_key=True, max_length=100)
    school_id = models.ForeignKey('School', models.DO_NOTHING, db_column='school_id')

    class Meta:
        managed = False
        db_table = 'student'

class Exam(models.Model):
    result_id = models.CharField(primary_key=True, max_length=100)
    grade = models.CharField(max_length=100, blank=True, null=True)
    student_id = models.ForeignKey('Student', models.DO_NOTHING, db_column='student_id')

    class Meta:
        managed = False
        db_table = 'exam'

Вот как я пытаюсь импортировать данные:

new = new_file.txt
result_id = linecache.getline(new, 1).split(':')[1]
grade = linecache.getline(new, 2).split(':')[1]
student_id = linecache.getline(new, 3).split(':')[1]

new_Exam = Exam(result_id=result_id,
                grade=grade,
                student_id=student_id)
# This gives the ValueError !!!
new_Exam.save()

Я попытался создать экземпляр Student, но это потребовало бы создания экземпляра School. Моя реальная база данных более сложная с большим количеством внешних ключей, что делает необходимым создание каскада экземпляров только для этого одного оператора вставки SQL. Я мог бы использовать psycopg2 для создания более прямого доступа к базе данных. Но тогда мне пришлось бы использовать Django ORM вместе с psycopg2, что не кажется мне разумным решением.

Как я могу решить это более элегантно?

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