bulk_create如何在每个对象上调用函数

时间:2013-08-24 18:17:39

标签: python django django-models

参考以下bulk_create查询:

objs = [
        Message(
            recipient_number=e.mobile,
            content=content,
            sender=e.contact_owner,
            billee=user,
            sender_name=sender,
            gateway=gateway,
        )
        for e in query

    ]
    # Send messages to DB
    Message.objects.bulk_create(objs)

我的问题:

我必须使用bulk_create(出于性能原因)。但是我需要在创建的每个对象上调用instance.send(gateway)

使用批量创建我似乎无法做到这一点,因为PK不一定适用于post_save信号意味着这不起作用 ....

@receiver(post_save, sender=Message)
def my_post_save_handler(sender, instance, **kwargs):
    instance.send(instance.gateway)

post_save.connect(my_post_save_handler, sender=Message)

所以我尝试了其他一些这样的事情......

objs = [
    Message(
       etc...
    ).send(gateway)
    for e in query

]

再次这不起作用。

这个问题让我有点生气,这很简单,所以我有什么选择?

我不会使用create,因为我要插入数百万个对象,所以不得不继续使用bulk_create!

谢谢。 :)

1 个答案:

答案 0 :(得分:1)

您正在尝试保存发送结果,但发送返回无。相反,你应该依次调用每个对象中的send,然后将所有对象发送到bulk_create:

for obj in objs:
    obj.send(gateway)
Message.objects.bulk_create(objs)