Создание объектов в массовом порядке и их последующая сериализация
модель:
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
.