コード例 #1
0
def data_upload(request):
    if request.method == 'GET':
        return render(request, 'bulk_upload.html', {})

    data_file = request.FILES['file']
    images_zip = request.FILES['images']

    if not data_file.name.endswith('.csv') and not images_zip.name.endswith(
            '.zip'):
        messages.error(request, 'This is not a csv file')
        return render(request, 'teacher/bulk_upload.html', {})

    data_set = data_file.read().decode('UTF-8')
    io_string = io.StringIO(data_set)
    next(io_string)

    zipped_files = ZipFile(images_zip)
    image_names = zipped_files.namelist()

    for column in csv.reader(io_string, delimiter=',', quotechar='"'):
        if not column[3] == '':
            image_name = column[2]
            teacher, created = Teacher.objects.update_or_create(
                first_name=column[0],
                last_name=column[1],
                email_address=column[3],
                phone_number=column[4],
                room_number=column[5])

            if not image_name == '':
                if image_name in image_names:
                    zip_img = zipped_files.read(image_name)
                    tmp_file = io.BytesIO(zip_img)
                    dummy_file = File(tmp_file)
                    dummy_file.name = image_name
                    dummy_file.size = len(zip_img)
                    dummy_file.file = tmp_file
                    teacher.profile_picture = dummy_file
                    teacher.save()

            subjects = column[6].split(',')
            subjects_taught_count = TeacherSubject.objects.filter(
                teacher=teacher).count()

            for subject in subjects:
                if subjects_taught_count > 5:
                    break

                subject = subject.strip().lower()
                subject_object, created = Subject.objects.update_or_create(
                    title=subject)
                TeacherSubject.objects.update_or_create(teacher=teacher,
                                                        subject=subject_object)
                subjects_taught_count += 1

    messages.success(request, 'Data has been uploaded')
    return render(request, 'teacher/bulk_upload.html', {})