Загрузка и анализ файла xlsx - PullRequest
0 голосов
/ 01 декабря 2018

Как продолжить работу с загруженным файлом?разберите его на модель

views.py

def model_form_upload(request):
if request.method == 'POST':
    form = DocumentForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
        return redirect('home')
else:
    form = DocumentForm()
return render(request, 'core/model_form_upload.html', {
    'form': form
})

my model.py

class Document(models.Model):
description = models.CharField(max_length=255, blank=True)
document = models.FileField(upload_to='documents/')
uploaded_at = models.DateTimeField(auto_now_add=True)

class Parameters(models.Model):
par_time = models.DateTimeField('date')
par_recipe = models.CharField(max_length=200)
par_machine = models.CharField(max_length=200)
par_fa = models.CharField(max_length=200)
par_ag_typ = models.CharField(max_length=200)
par_rollennr = models.IntegerField(default=0)
par_definition_id = models.IntegerField(default=0)
par_name = models.CharField(max_length=200)
par_value = models.IntegerField(default=0)

Используется для загрузки файлов Excel (xlsx).Поля в xlsx представлены, как описано в модели.

Как только я не попробовал, я новичок в Django, и у меня ничего нет

1 Ответ

0 голосов
/ 01 декабря 2018

Для начала вам нужна библиотека, которая читает файлы XLSX.Я считаю openpxyl самым простым.Установите его с помощью pip install openpyxl.

Чтобы обработать загруженный файл, напишите небольшую функцию.Что-то вроде приведенного ниже кода.

import openpyxl

def handle_parameters_upload(request, file):

    wb = openpyxl.load_workbook(file, read_only=True)
    first_sheet = wb.get_sheet_names()[0]
    ws = wb.get_sheet_by_name(first_sheet)

    data = []

    # Loop over rows and create `Parameters()` objects with column data
    # row_offset=1 is used if you have a header row in your file, you want to skip it 
    # otherwise use 0 or delete the row_offset parameter, since 0 is default
    for row in ws.iter_rows(row_offset=1):
        parameter = Parameters()
        parameter.par_time = row[0].value
        parameter.par_recipe = row[1].value
        parameter.par_machine = row[2].value
        parameter.par_fa = row[3].value
        parameter.par_ag_typ = row[4].value
        parameter.par_rollennr = row[5].value
        parameter.par_definition_id = row[6].value
        parameter.par_name = row[7].value
        parameter.par_value = row[8].value

        data.append(parameter)

    # Bulk create data
    Parameters.objects.bulk_create(data)

    return True

Это откроет файл XLSX, прочитает данные из него и сохранит в базе данных. bulk_create () используется, потому что он эффективно вставляет объекты в базу данных.

Настройте представление model_form_upload ().

def model_form_upload(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            handle_file = handle_parameters_upload(request, request.FILES['document'])
            return redirect('home')
    else:
        form = DocumentForm()
    return render(request, 'core/model_form_upload.html', {'form': form})

Существуют также другие библиотеки для чтения / записи XLSX, которые вы можете использовать.Я также часто использую pyexcel .

...