上。在參考以下bulk_create
查詢: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,因爲我插入了數百萬個對象!
謝謝。 :)
如果創建的數百萬個對象的'list'是沒有問題的,那麼你可以添加一個標誌字段,這將表明是否已經發送消息,並且在'bulk_create'之後獲取未設置該標誌的所有對象(或者字段的子集)並且執行發送。 –
這是一個好主意 – GrantU
只是好奇心:數百萬個對象如何適合查詢字符串?我的意思是,你調整了你的數據庫還是做了一些Django端優化?我想這將很難發送幾兆字節的查詢到服務器。 –