0

I am trying to upload a CSV into a Django Model. The problem I am encountering is, how can I write the data from my CSV to each of the fields without using indexes? Instead, write directly the field name from my CSV.

with open(obj.file_name.path, 'r', encoding="utf-8") as f:
        reader = csv.reader(f)
        review_count = 0
        for i, row in enumerate(reader):
            review_count += 1
            print(i)
            if i==0:
                pass
            else:
                OrderProcessModel.objects.create(
                order_id=row[0],
                order_date=row[1],
                external_id=row[2],
                email=row[3],
                first_name=row[4],
                last_name=row[5],
                quantity=row[6],
                product_id=row[7],
                owner=request.user
                )
                print(row)
        obj.activated = True
        obj.save()

For example for order_id=row[0], how can I specifically save the data from my CSV to my Django Model field order_id without using row[0]? Like order_id=row['order_id'] is not working.

Thanks!

manntala
  • 15
  • 4

1 Answers1

1

Take a look at csv.DictReader (docs)

import csv

with open(obj.file_name.path, 'r', encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        # row is a dictionary
        print(row['order_id'], row['order_date'])

In case you are wondering how to turn that dictionary into an object, take a look at this: Can a dictionary be passed to django models on create?

Hubert Grzeskowiak
  • 15,137
  • 5
  • 57
  • 74