Для django 1.8, который я использую,
Я сделал команду, что вы можете создавать объекты динамически в будущем,
так что вы можете просто указать путь к файлу CSV, имя модели и имя приложения соответствующего приложения django, и оно заполнит соответствующую модель без указания имен полей.
так что если мы возьмем, например, следующий CSV:
field1,field2,field3
value1,value2,value3
value11,value22,value33
это создаст объекты
[{field1: значение1, поле2: значение2, поле3: значение3}, {поле1: значение11, поле2: значение22, поле3: значение33}]
для названия модели вы введете в команду.
код команды:
from django.core.management.base import BaseCommand
from django.db.models.loading import get_model
import csv
class Command(BaseCommand):
help = 'Creating model objects according the file path specified'
def add_arguments(self, parser):
parser.add_argument('--path', type=str, help="file path")
parser.add_argument('--model_name', type=str, help="model name")
parser.add_argument('--app_name', type=str, help="django app name that the model is connected to")
def handle(self, *args, **options):
file_path = options['path']
_model = get_model(options['app_name'], options['model_name'])
with open(file_path, 'rb') as csv_file:
reader = csv.reader(csv_file, delimiter=',', quotechar='|')
header = reader.next()
for row in reader:
_object_dict = {key: value for key, value in zip(header, row)}
_model.objects.create(**_object_dict)
обратите внимание, что, возможно, в более поздних версиях
from django.db.models.loading import get_model
устарела и должна быть изменена на
from django.apps.apps import get_model