Django CSV Import - импортировать только первую строку данных при использовании æ, ø, å (датские символы) и пробелов - PullRequest
0 голосов
/ 11 ноября 2019

Я сделал систему в Django с реализацией импорта CSV. Однако, когда первый столбец данных содержит датские специальные символы Æ, Ø и Å или пробелы, он вставляет только первую строку данных.

Я прочитал, что модуль csv в Python, который я использую, не поддерживает ввод Unicode. Я предоставил код ниже для функции, которая соединяет файл CSV с моделью базы данных в Django.

Примечание: База данных создана в Mysql

views.py

def opret_hold(request):
    prompt = {
        "hold": "Rækkefølgen på inholdet af din .csv fil skal være: ma, fornavn, efternavn, hold, deling"
    }

    if request.method == 'GET':
        return render(request, 'evalsys/admin/upload/opret_hold.html', prompt)
    try:
        csv_file = request.FILES['file']

        if not csv_file.name.endswith('.csv'):
            messages.warning(request, 'Dette er ikke en .csv fil.')

        data_set = csv_file.read().decode("utf-8")
        io_string = io.StringIO(data_set)
        for row in csv.reader(io_string, delimiter=','):
            for column in csv.reader(io_string, delimiter=','):
                __, created = Hold.objects.get_or_create(
                    holdnavn=column[0],
                    slug=column[0],
                )
                created = Medarbejder.objects.get_or_create(
                    delingnavn_id=column[1],
                    slug=column[2],
                    ma=column[2],
                    fornavn=column[3],
                    efternavn=column[4],
                    holdnavn_id=Hold.objects.get(pk=(column[0])),
                )

        if request.method == 'POST' and HttpResponse.status_code == 200:
            messages.success(request, "Hold oprettet.")

    finally:
        context = {}
        return render(request, 'evalsys/admin/upload/opret_hold.html', context)

opret_hold.html

<form method="post" enctype="multipart/form-data">
                        {% csrf_token %}
                        <input type="file" name="file" required>
                        <p>Dette system acceptere kun .csv filer.</p>
                        <button type="submit" class="btn" id="generel-btn">Upload</button>
                        <br>
                    </form>

1 Ответ

0 голосов
/ 11 ноября 2019

проблема в вашем цикле for, вы написали 2 цикла, которые косвенно обращаются только к строкам

data_set = csv_file.read().decode("utf-8")
io_string = io.StringIO(data_set)
for row in csv.reader(io_string, delimiter=','):
   hold, created = Hold.objects.get_or_create(
    holdnavn=row[0],
    slug=row[0],
   )
   medarbejder,created = Medarbejder.objects.get_or_create(
    delingnavn_id=row[1],
    slug=row[2],
    ma=row[2],
    fornavn=row[3],
    efternavn=row[4],
    holdnavn_id=hold,
   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...