首页 > 解决方案 > 在 django 中将数据从 csv 文件导入到带有外键的表中

问题描述

我试图将数据从 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. 我将不胜感激任何帮助。

标签: pythondjangodatasetcsv-importtablib

解决方案


推荐阅读