Загруженный CSV в Django не сохраняется - PullRequest
1 голос
/ 28 сентября 2019

Единственная цель этого проекта - показать загруженный CSV на шаблон из шаблона.Оно работает.Но когда я перезагружаю сервер или даже просто обновляю страницу, загруженные данные CSV исчезают.При обработке запроса не передавалось никаких данных в шаблон через контекст.

My views.py:

import csv, io
from django.shortcuts import render
from django.contrib import messages
from .models import Table

def data_upload(request):
    template = "home.html"

    if request.method == 'GET':
        return render(request, template)

    csv_file = request.FILES['file']
    if not csv_file.name.endswith('.csv'):
        messages.error(request, 'Please upload a .csv file.')

    data_set = csv_file.read().decode('ISO-8859-1')
    io_string = io.StringIO(data_set)
    next(io_string)
    for column in csv.reader(io_string, delimiter=','):
        _, created = Table.objects.update_or_create(
            page=column[0], 
            keyword=column[1], 
            interval=column[2], 
            email=column[3], 
            notes=column[4], 
            billing=column[5],
        )
    context = {
        'tables': Table.objects.all()
    }
    return render(request, template, context)

Форма загрузки шаблона:

<form method="POST" enctype="multipart/form-data" action="">{% csrf_token %}
<div class="file-field input-field">
<div class="btn">
    <span>Upload a CSV FILE</span>
    <input type="file" name="file">
</div>
<div class="file-path-wrapper">
    <input class="file-path validate" type="text">
</div>
<button class="waves-effect waves-light btn teal" type="submit">Upload</button>
    </div>

Я знаю, что где-то нужен .save (), и я пробовал его, но он не работает.

Кто-нибудь?

1 Ответ

2 голосов
/ 28 сентября 2019

Как упомянул @Mehran, вы не передаете контекст 'таблиц' во время запроса GET.Вот почему вы получаете данные в POST, а не в GET.

import csv, io
from django.shortcuts import render
from django.contrib import messages
from .models import Table

def data_upload(request):
    template = "home.html"


    if request.method == 'POST':
        csv_file = request.FILES['file']
        if not csv_file.name.endswith('.csv'):
            messages.error(request, 'Please upload a .csv file.')

        data_set = csv_file.read().decode('ISO-8859-1')
        io_string = io.StringIO(data_set)
        next(io_string)
        for column in csv.reader(io_string, delimiter=','):
            _, created = Table.objects.update_or_create(
                page=column[0], 
                keyword=column[1], 
                interval=column[2], 
                email=column[3], 
                notes=column[4], 
                billing=column[5],
            )
    elif request.method == 'GET':
        # DO something in GET call
        pass
    context = {
        'tables': Table.objects.all()
    }
    return render(request, template, context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...