使用外键 Django 将数据导入 SQLITE 数据库



我想使用一个外键(即班级信息(将学生的姓名列表导入数据库。

姓名列表 Model.py:

name = models.CharField(max_length=100)
program = models.CharField(max_length=10)
classGrp = models.ForeignKey('GroupInfo', on_delete=models.SET_NULL, null=True)

名称列表中的数据如下所示:

id      name            program     classGrp    
1   ABHISHEK SINGH  CE1 1

集团信息 Model.py:

class GroupInfo(models.Model):
classGrp = models.CharField(max_length=10)
day = models.CharField(max_length=15)

群信息中的数据是这样的:

id      classGrp   day
1   FEP1    Tues    
2   FSP1    Wed 

当我导入名称列表数据时,例如:

id  name    program     classGrp
137 Dummy   FP      2

它不存储 2,即类 Grp。当我在 http://127.0.0.1:8000/admin 检查classGrp的详细信息时:classGrp在下拉列表中显示classgr(FEP1,FSP1(而不是ID(1,2(。

视图。.PY:

def import_studName(request):
template = "import_stud.html"
prompt = {
'order' : 'Kindly ensure that the order of CSV should be id, name, program, classGrp'
}
if request.method == "GET":
return render(request, template, prompt)
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request, 'This is not a csv file')
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
next(io_string) 
for column in csv.reader(io_string, delimiter=',', quotechar="|"):
if column[3] != '':
classGrp = GroupInfo.objects.get(pk = (column[3]))
else: 
classGrp = GroupInfo.objects.get()
_, created = Namelist.objects.update_or_create(
id=column[0],
name=column[1],
program=column[2],
classGrp = column[3]
)

context = {}    
return render(request,template, context)

这就是为什么它不导入 classGrp 数据(即 2(的原因。

如何将外键 ID 导入数据库?

错误信息:

无法分配"'2'":"Namelist.classGrp"必须是"GroupInfo"实例。

设法解决了我自己的问题。我的错误是我没有在namelist.update_or_create中调用classgrp。

以下是更新的答案:

for column in csv.reader(io_string, delimiter=',', quotechar="|"):
if column[3] != '':
classGrp = GroupInfo.objects.get(pk = (column[3]))
else: 
classGrp = GroupInfo.objects.get()
_, created = Namelist.objects.update_or_create(
id=column[0],
name=column[1],
program=column[2],
classGrp = GroupInfo.objects.get(pk = (column[3]))
)

最新更新