Django закачать csv файл - в db сохраняется только 1-я строка .. Что может быть не так? - PullRequest
1 голос
/ 11 июля 2020

Я создаю приложение 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 голосов
/ 11 июля 2020

У вас есть строка return в for l oop, переместите эту строку за l oop

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 = {}
    <b>return render(request, 'teachers/importteacher.html', context)</b>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...