У меня есть куча CSV-файлов, которые я сделал для загрузки в django модель. 1. Создан вид для загрузки csv 2. Разделил поля и добавил их в переменную 3. Вызвал метод update_or_create () для добавления информации в модель.
Проблема, с которой я сталкиваюсь, заключается в получении django обновить старую строку вместо создания новой. Если учащийся потерпел неудачу в первый год, но сдает его в следующем году, старые оценки должны быть обновлены.
Я пытаюсь отфильтровать () номер регистрационного номера студента и класса, чтобы сузить его. Если есть студент с, например, AAAAAA1111 из BA 1 SEM, который сдал экзамен в 2016, 2017 и сдал в 2018 году, последний результат должен обновить старый результат.
Я прилагаю два документа, которые я использовал. Одним из них является результат 2016 года, а вторым является CSV ретрансляторов 2017 года. ССЫЛКА НА ФАЙЛЫ: https://drive.google.com/open?id=1_5cHRKNYdLBYWLhPw_Z4dn-VgX14Amw2
Вот как выглядит мой взгляд
template = "uploadstudent.html"
data = {}
if "GET" == request.method:
return render(request, template, data)
# if not GET, then proceed
csv_file = request.FILES["csv_file_student"]
if not csv_file.name.endswith('.csv'):
messages.error(request,'File is not CSV type')
return redirect(request,template)
data_set = csv_file.read().decode('UTF-8') # setup a stream which is when we loop through each line we are able to handle a data in a stream
io_string = io.StringIO(data_set)
#loop over the lines and save them in db. If error , store as string and then display
for fields in csv.reader(io_string, delimiter=',', quotechar="|"):
data_dict = {}
data_dict["registerNo"] = fields[0]
data_dict["studentName"] = fields[1]
data_dict["result"] = fields[2]
data_dict["totalMarks"] = fields[3]
data_dict["studentClass"] = fields[4]
data_dict["exam"] = fields[5]
data_dict["subject1"] = fields[6]
data_dict["subject1Marks"] = fields[7]
data_dict["subject1Result"] = fields[8]
data_dict["subject2"] = fields[9]
data_dict["subject2Marks"] = fields[10]
data_dict["subject2Result"] = fields[11]
data_dict["subject3"] = fields[12]
data_dict["subject3Marks"] = fields[13]
data_dict["subject3Result"] = fields[14]
data_dict["subject4"] = fields[15]
data_dict["subject4Marks"] = fields[16]
data_dict["subject4Result"] = fields[17]
data_dict["subject5"] = fields[18]
data_dict["subject5Marks"] = fields[19]
data_dict["subject5Result"] = fields[20]
data_dict["subject6"] = fields[21]
data_dict["subject6Marks"] = fields[22]
data_dict["subject6Result"] = fields[23]
#data_dict["subject7"] = fields[24]
#data_dict["subject7Marks"] = fields[25]
#data_dict["subject7Result"] = fields[26]
#print(data_dict["studentClass"])
#print(data_dict)
studentInfo = studentResult.objects.filter(studentClass__icontains=data_dict["studentClass"], registerNo__icontains=data_dict["registerNo"]).update_or_create(
registerNo=data_dict["registerNo"],
studentName=data_dict["studentName"],
result=data_dict["result"],
studentClass=data_dict["studentClass"],
totalMarks=data_dict["totalMarks"],
exam=data_dict["exam"],
subject1=data_dict["subject1"],
subject1Marks=data_dict["subject1Marks"],
subject1Result=data_dict["subject1Result"],
subject2=data_dict["subject2"],
subject2Marks=data_dict["subject2Marks"],
subject2Result=data_dict["subject2Result"],
subject3=data_dict["subject3"],
subject3Marks=data_dict["subject3Marks"],
subject3Result=data_dict["subject3Result"],
subject4=data_dict["subject4"],
subject4Marks=data_dict["subject4Marks"],
subject4Result=data_dict["subject4Result"],
subject5=data_dict["subject5"],
subject5Marks=data_dict["subject5Marks"],
subject5Result=data_dict["subject5Result"],
subject6=data_dict["subject6"],
subject6Marks=data_dict["subject6Marks"],
subject6Result=data_dict["subject6Result"],
#subject7=data_dict["subject7"],
#subject7Marks=data_dict["subject7Marks"],
#subject7Result=data_dict["subject7Result"]
)
#return render(request, "listuploads.html", context)