Создание объектов в массовом порядке и их последующая сериализация

модель:

class ProductImage(models.Model):
    post = models.ForeignKey(Product,...)
    image = models.ImageField(...)

view:

pobj = Product.objects.get(user=request.user, id=id)
nimg = int(request.data['numofimg'])
for i in range(nimg):
    image = request.data[f'image{i}']
    obj = ProductImage.objects.create(post=pobj, image=image)

pobjs = Product.objects.all()

serialerize = ProductImageSeriailzer(pobjs, many=True)
# it would be better if pobjs only have newly created objects (in above for loop)

Есть ли какой-нибудь эффективный код для этого? Количество запросов увеличивается с ростом количества изображений. Как я могу их уменьшить?

Уменьшить количество записей в базу данных невозможно, но вы могли бы сделать bulk_create своих объектов.

pobj = ProductImage.objects.get(user=request.user, id=id)
product_images = [ProductImage(post=pobj, image= request.data[f'image{x}']) for x in range(int(request.data['numofimg']))]
ProductImage.objects.bulk_create(product_images)
pobjs = Product.objects.all()

Это сократит часть кода, но под капотом bulk_create также выполняет CREATE для каждого переданного объекта.


Кстати, вы передаете объекты Product в сериализатор ProductImage. Также у вас есть опечатка в ProductImageSeriailzer и serialerize. Должно быть ProductImageSerializer и serializer.

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