Django - Проверить, существует ли набор переменных в базе данных и обработать ли он? - PullRequest
0 голосов
/ 27 ноября 2018

Итак, у меня есть приложение Django, куда можно загрузить CSV-файл.Мой CSV-файл имеет 9 столбцов, которые можно разделить на два «набора данных», где первые 5 столбцов должны обрабатываться как одна информация, а остальные 4 - как другая информация.Я не могу поместить первые 5 в одну клетку, а остальные в другую.Я хотел бы проверить, существует ли первый набор данных, и если он существует, обработать его.То же самое относится и к другому набору данных.И если оба набора данных уже не существуют, просто обновите базу данных с помощью get_or_create.

Вот моя views.py идея

    def import_csv(request):
    if request.method == "POST":
        with open('C:/Users/admin/Desktop/djangoexcel/b.csv') as file:
            reader = csv.reader(file)
            for row in reader:
                var = CSV_File4.objects.filter(
                    attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
                )
                if var.exists():
                    TemplateResponse(request, "documents/replace_entry.html", {'var' : var})
                else:
                    for row in reader:
                        switch = CSV_File4.objects.filter(
                            attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
                        )
                        if var2.exists():
                            TemplateResponse(request, "documents/replace_entry.html", {'var2' : var2})
                        else:
                            for row in reader:
                                _, p = CSV_File4.objects.get_or_create(
                                    attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
                                    attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
                                )


            return redirect('documents:index')
    form = UploadFileForm()
    return render(
        request, "documents/csv_upload.html", {"form": form}
    )

Это должно выглядеть примерно так.Как я могу сделать эту работу.Это была просто идея с filter () и exist (), но есть ли Python способ сделать что-то подобное?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 27 ноября 2018

В настоящее время вы пытаетесь рекурсивно выполнить итерацию по reader три раза.Это невозможно, потому что это Iterator, а не list.В любом случае, вам нужно сделать это только один раз, а затем поработать над этой конкретной строкой, прежде чем переходить к следующей.

def import_csv(request):
    if request.method == "POST":
        with open('C:/Users/admin/Desktop/djangoexcel/b.csv') as file:
            reader = csv.reader(file)
            for row in reader:
                ds1 = CSV_File4.objects.filter(
                    attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
                ).exists()
                ds2 = CSV_File4.objects.filter(
                    attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
                ).exists()

                if ds1:
                    pass  # Process first dataset
                if ds2:
                    pass  # Process second dataset
                if not (ds1 and ds2):
                    _, p = CSV_File4.objects.get_or_create(
                        attr1=row[0], attr2=row[1], attr3=row[2], attr4=row[3], attr5=row[4],
                        attr6=row[5], attr7=row[6], attr8=row[7], attr9=row[8]
                    )

            return redirect('documents:index')

    return render(
        request, "documents/csv_upload.html", {"form": UploadFileForm()}
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...