【问题标题】:Creating object in bulk and then serialize them批量创建对象然后序列化它们
【发布时间】:2022-01-05 09:23:14
【问题描述】:

型号:

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

查看:

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)

他们有相同的有效代码吗? 这里的查询数量将随着图像数量的增加而增加 我怎样才能减少它们?

【问题讨论】:

    标签: django django-models django-rest-framework django-views django-serializer


    【解决方案1】:

    不可能减少数据库写入次数,但您可以对对象执行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 序列化程序。此外,ProductImageSeriailzerserialerize 中有错字。应该是ProductImageSerializerserializer

    【讨论】:

    • 所以sql查询的数量不会少:(
    猜你喜欢
    • 2018-11-08
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多