Доступ к извлеченным данным из csv в django для создания нового класса
Здравствуйте, я работаю над проектом Django, в котором я итерирую CSV файл для извлечения данных, а затем использую эти данные для создания объекта (продукта).
Файл products.models.py
структурирован следующим образом:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=120)
image = models.ImageField(upload_to='products', default='no_picture.png')
price = models.FloatField(help_text='in US dollars $')
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.name}-{self.created.strftime('%d/%m/%Y')}"
CSV, через который я итерирую, имеет следующую структуру:
POS,Transaction id,Product,Quantity,Customer,Date
1,E100,TV,1,Test Customer,9/19/2022
2,E100,Laptop,3,Test Customer,9/20/2022
3,E200,TV,1,Test Customer,9/21/2022
4,E300,Smartphone,2,Test Customer,9/22/2022
5,E300,Laptop,5,New Customer,9/23/2022
6,E300,TV,1,New Customer,9/23/2022
7,E400,TV,2,ABC,9/24/2022
8,E500,Smartwatch,4,ABC,9/25/2022
Открывая csv-файл после его добавления и итерируя его, я делаю следующее:
if request.method == 'POST':
csv_file = request.FILES.get('file')
obj = CSV.objects.create(file_name=csv_file)
with open(obj.file_name.path, 'r') as f:
reader = csv.reader(f)
reader.__next__()
for row in reader:
print(row, type(row)) # list
data = ";".join(row)
print(data, type(data)) # creates a str
data = data.split(';') # creates a list
print(data, type(data))
print(data)
Пока все хорошо. Затем я подготавливаю элементы, посмотрев на вывод из терминала:
['1', 'E100', 'TV', '1', 'Test Customer', '9/19/2022'] <class 'list'>
1;E100;TV;1;Test Customer;9/19/2022 <class 'str'>
['1', 'E100', 'TV', '1', 'Test Customer', '9/19/2022'] <class 'list'>
['1', 'E100', 'TV', '1', 'Test Customer', '9/19/2022']
Подготовка объекта из Product, и здесь что-то начинает идти не так, хотя еще не совсем:
transaction_id = data[1]
product = data[2]
quantity = int(data[3])
customer = data[4]
date = parse_date(data[5])
Но здесь, при создании объекта и получении его по имени:
try:
product_obj = Product.objects.get(name=product)
except Product.DoesNotExist:
product_obj = None
print(product_obj)
Я всегда получаю None для product_obj. Изменяя строку для соответствия написанию в нижнем регистре, я получаю все то же самое:
product_obj = Product.objects.get(name__iexact=product)
При добавлении этого перед кодом try/except:
product_obj = Product.objects.get(name=product)
print(product_obj, type(product_obj))
Ошибка, которую я получаю
raise self.model.DoesNotExist(
products.models.Product.DoesNotExist: Product matching query does not exist.
[27/Sep/2022 18:43:30] "POST /reports/upload/ HTTP/1.1" 500 18602
[27/Sep/2022 18:43:30] "GET /__debug__/history_sidebar/?store_id=08bddc1c85314a40a682e27b3582dec6 HTTP/1.1" 200 10255
Как бы вы поступили в этом случае?