Есть ли более быстрый способ загрузки нескольких файлов в Django?

У меня есть проект django, в котором клиент может загружать несколько файлов одновременно. Моя проблема в том, что для каждого загруженного файла я создаю объект модели - по одному за раз. Есть ли способ сделать это с помощью bulk create или какого-то другого метода, который быстрее.

Views.py:

    images = request.FILES.getlist('images')
    xmls = request.FILES.getlist('xmls')
    jsons = request.FILES.getlist('jsons')
    
    for image in images:
        img_name = (str(image).split('.')[0])
        dp_name = dataset_name+'-'+img_name

        if [xml for xml in xmls if img_name+'.' in str(xml)]:
            xml = [xml for xml in xmls if img_name+'.' in str(xml)][0]
        else:
            xml = None

        if [json for json in jsons if img_name+'.' in str(json)]:
            json = [json for json in jsons if img_name+'.' in str(json)][0]
        else:
            json = None
        dataset.create_datapoint(image, xml, json, username, dp_name)

Models.py:

    def create_datapoint(self, image, xml, json, username, dp_name):
    datapoint = Datapoint.objects.create(
        xml = xml,
        json = json,
        name = dp_name,
        uploaded_by = username,
        img = image,
        belongs_to = self,
    )
    self.num_datapoints += 1
    datapoint.parse_xml()
    self.datapoints.add(datapoint)
    self.save()

    return 

Вы можете использовать метод .bulk_create(). Например.

data_point_create_list = []
# First create a list of objects.
for image in images:
    Datapoint(xml = xml,
        json = json,
        name = dp_name,
        uploaded_by = username,
        img = image,
        belongs_to = self)
    data_point_create_list.append(Datapoint)

# Then bulk create all the objects.
if data_point_create_list:
    Datapoint.objects.bulk_create(data_point_create_list)

@mnislam01 прав, но в предоставленном коде есть небольшая ошибка.

Вот он исправлен:

data_point_create_list = []
# First create a list of objects.
for image in images:
    dp = Datapoint(xml = xml,
        json = json,
        name = dp_name,
        uploaded_by = username,
        img = image,
        belongs_to = self)
    data_point_create_list.append(dp)


# Then bulk create all the objects.

if data_point_create_list:
    Datapoint.objects.bulk_create(data_point_create_list)

Просто нужно было присвоить только что созданную точку данных перед добавлением.

Вернуться на верх