Django上传csv文件-仅第一行保存在数据库中。

时间:2020-07-11 07:32:56

标签: django csv upload

我正在创建django应用程序,并且尝试上载csv文件,上载后仅保存1行。请在下面找到示例数据。

CSV文件:

first_name, last_name, email, phone, room
Juliet, Tolentino, julz@gmaial.com, 1234567, 13
Jiselle, Buena, jis@gmail.com, 45678899, 14

型号:

class Teacher(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.CharField(max_length=50)
    phone = models.CharField(max_length=20)
    room = models.CharField(max_length=20)
    photo = models.ImageField(upload_to='photos/%Y/%m/%d/', default='prof_avatar.jpg')
    created = models.DateTimeField(auto_now_add=True)

观看次数

def importteacher(request):
    if request.method == 'GET':
        return render(request, 'teachers/importteacher.html')

    csv_file = request.FILES['file']

    if not csv_file.name.endswith('.csv'):
        return render(request, 'teachers/importteacher.html',
                      {'form': AuthenticationForm(), 'error': 'The file is not a CSV format'})

    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=','):
        _, created = Teacher.objects.update_or_create(
            first_name=column[0],
            last_name=column[1],
            email=column[2],
            phone=column[3],
            room=column[4]
        )
        context = {}
        return render(request, 'teachers/importteacher.html', context)

表格

<form  method="POST" ENCTYPE="multipart/form-data">
    {% csrf_token %}
    <div class="row justify-content-center mt-5">
        <div class="col-md-5">
            <h2>Import Teacher</h2>
             <input class="btn btn-primary" type="file" name="file">
             <p>ONLY accepts csv files</p>
             <button type="submit" class="btn btn-primary">Upload</button>
        </div>
    </div>
</form>

谢谢。感谢您的答复

1 个答案:

答案 0 :(得分:0)

for循环中有return行,请将此行移出循环

def importteacher(request):
    ...
    for column in csv.reader(io_string, delimiter=','):
        _, created = Teacher.objects.update_or_create(
            first_name=column[0],
            last_name=column[1],
            email=column[2],
            phone=column[3],
            room=column[4]
        )
    context = {}
    return render(request, 'teachers/importteacher.html', context)