python - 在 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. 我将不胜感激任何帮助。
解决方案
推荐阅读
- php - 表单输入值未在操作中传递
- jenkins - 即使元素存在,机器人框架也无法检测到元素的可能原因是什么?
- javascript - 如果不在数组中,则用于更新的 Firestore 规则
- python - Pandas - 如何在不使用循环的情况下为重复系列分配不同的类?
- pandas - 用熊猫重命名特定单元格下方的多个单元格
- c - 使用 pred 读取文件
- spring-boot - 无法在 springboot 中为 JMSListner @MockBean
- c# - web3 集成现有的 ERC20 合约
- javascript - 为什么 JavaScript 缩小器不使用它分配给“this”的变量
- python - 变分自动编码器的最佳输入图像尺寸