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