# product/views.py
from django.views.decorators.http import require_http_methods
from .services import csv_to_list_in_memory, save_data
@require_http_methods(['POST'])
def import_csv(request):
csv_file = request.FILES.get('csv_file')
data = csv_to_list_in_memory(csv_file)
save_data(data)
return redirect('product:product_list')
# product/services.py
import csv
import io
from .models import Product
def csv_to_list_in_memory(filename: str) -> list:
'''
Lê um csv InMemoryUploadedFile e retorna um OrderedDict.
'''
file = filename.read().decode('utf-8')
reader = csv.DictReader(io.StringIO(file))
# Gerando uma list comprehension
data = [line for line in reader]
return data
def save_data(data):
'''
Salva os dados no banco.
'''
aux = []
for item in data:
title = item.get('title')
price = item.get('price')
obj = Product(
title=title,
price=price,
)
aux.append(obj)
Product.objects.bulk_create(aux)
# product/admin.py
from django.contrib import admin
from import_export import resources
from import_export.admin import ImportExportModelAdmin
from .models import Category, Photo, Product
class ProductResource(resources.ModelResource):
class Meta:
model = Product
@admin.register(Product)
class ProductAdmin(ImportExportModelAdmin):
resource_classes = [ProductResource]
...