Python 使用外键django将数据导入sqlite数据库
我想用一个外键将学生的姓名列表导入数据库,外键是班级信息 名称列表Model.py:Python 使用外键django将数据导入sqlite数据库,python,django,Python,Django,我想用一个外键将学生的姓名列表导入数据库,外键是班级信息 名称列表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) class GroupInfo(models.Model): classGrp
name = models.CharField(max_length=100)
program = models.CharField(max_length=10)
classGrp = models.ForeignKey('GroupInfo', on_delete=models.SET_NULL, null=True)
class GroupInfo(models.Model):
classGrp = models.CharField(max_length=10)
day = models.CharField(max_length=15)
名称列表中的数据如下所示:
id name program classGrp
1 ABHISHEK SINGH CE1 1
GroupInfo 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)
class GroupInfo(models.Model):
classGrp = models.CharField(max_length=10)
day = models.CharField(max_length=15)
groupInfo中的数据如下所示:
id classGrp day
1 FEP1 Tues
2 FSP1 Wed
当我导入名称列表数据时,例如:
id name program classGrp
137 Dummy FP 2
它不存储2,它是classGrp。当我在以下位置检查classGrp的详细信息时:classGrp在dropdownlist中显示classgr(FEP1,FSP1),而不是ID(1,2)
VIEW.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\u或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]))
)
为什么是第8栏?classGrp ID在第3列中。(但不是,管理员按照您的请求显示组名这一事实并不是您的视图不导入组数据的原因。)哦,我有其他属性,并且没有相应地更改。它应该是id 4。那么我可以知道它没有导入组数据是什么问题吗?@Puteri您在哪里将GroupInfo实例(
classGrp
,在您的代码片段中)传递到名称列表。update\u或\u create
调用?我已经编辑了我的代码。classGrp=列[4]。错误是“无法分配”'2':“Namelist.classGrp”必须是“GroupInfo”实例