我试图将数据从 excel 文件导入我的数据库。数据格式为
question_no 中的值,问题列将存储在ExamQuestion表中,该表具有QuestionBank模型的外键,其余列值将存储在ExamOptions表中,该表具有ExamQuestion模型的外键。到目前为止,我可以保存question_no ,问题部分,但找不到存储其余数据的方法。这是我的代码
def import_question_option(request, pk=None):
if request.method == 'POST':
question_resource = resources.modelresource_factory(model=ExamQuestion)()
new_ques = request.FILES['myfile']
dataset = tablib.Dataset(
headers=['question_no', 'question',]
).load(new_ques .read().decode('utf-8'), format='csv')
dataset.append_col(
col=tuple(f'{pk}' for _ in range(dataset.height)),
header='question_bank_id'
)
result = question_resource.import_data(dataset, dry_run=True)
if not result.has_errors():
question_resource.import_data(dataset, dry_run=False)
qs_lst = dataset.get_col(0)
qs_obs = ExamQuestion.objects.filter(question_no__in=qs_lst).order_by('-id')
option_resource = resources.modelresource_factory(model=ExamOptions)()
dataset = tablib.Dataset(
headers=['options', 'options_code',]
).load(new_events.read().decode('utf-8'), format='csv')
# required code to add options to ExamOptions model
return HttpResponse("Success")
else:
qust_bank = QuestionBank.objects.get(id=pk)
return render(request, 'student/import_questions.html', {'qbank':qust_bank.name ,'pk': pk})
模型是
class QuestionBank(models.Model):
name = models.CharField(max_length=64, null=True)
language_id = models.ForeignKey(Languages, on_delete=models.SET_NULL, null=True)
description = models.TextField(null=True)
class ExamQuestion(models.Model):
question_no = models.IntegerField(verbose_name=_('question_no'), null=True)
question = models.CharField(max_length=250)
image = models.ImageField(upload_to='images/',null=True)
question_bank_id = models.ForeignKey(QuestionBank, on_delete=models.SET_NULL, null=True)
class ExamOptions(models.Model):
question = models.ForeignKey(ExamQuestion, on_delete=models.SET_NULL, null=True)
options = models.CharField(max_length=100)
options_code = models.CharField(max_length=10, default='A')
As I need the Foreignkey value to store data to the ExamOptions table which is only available after saving the Questions part, I tried collecting them but could not find a way to append them to the appropriate options. 我将不胜感激任何帮助。