2013-08-22 307 views
1

我有批量更新。每個消息創建我需要調用。發送(網關)這是我曾嘗試:Django對象沒有屬性

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

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

我得到這個錯誤:

任務請求與ID爲流程3ab72d3c-5fd8-4b7d-8cc5- e0400455334f發生異常: 'AttributeError(「\'NoneType \'object has no attribute \'pk \'」,)'

爲什麼?

回答

4

您正在通過致電對query的每個元素創建objs列表。據推測,send不會返回任何東西,你會得到一個None的列表。試試這個:

objs = [] 
for element in query: 
    message = Message(**kwargs) 
    message.send(gateway) 
    objs.append(message) 

Message.objects.bulk_create(objs) 

**kwargs只是您傳遞給Message的所有參數的佔位符。你可以使用一個字典或只是傳遞你的原始代碼中的所有參數。

作爲一個側面說明,列表解析通常表示當你想要一個新的列表而不是副作用(如發送消息)。這裏你需要兩個,所以for循環是合適的。

+0

我覺得發送只能保存到數據庫時才能調用,因爲它不保存,直到批量完成爲止,你確定這不是問題嗎? – GrantU

+0

如果是這樣的話,你的原始'send'也會失敗(我的建議不會改變這方面的任何事情)。但是,你應該在沒有'.send(gateway)'的情況下做列表理解,並且在調用'bulk_create'之後在'objs'消息對象上執行'for'循環,以便發送它們中的每一個。 –

+0

謝謝@PauloAlmeida。它對我來說非常合適。 –

相關問題