1

一括更新があります。.send(gateway) を呼び出す必要がある作成された各メッセージこれは私が試したことです:

  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

1 に答える 1

4

の各要素をobjs呼び出してリストを作成しています。おそらく、は何も返さず、 のリストを取得します。これを試して:sendquerysendNone

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

Message.objects.bulk_create(objs)

**kwargsMessage に渡すすべてのパラメーターの単なるプレースホルダーです。辞書を使用するか、元のコードのようにすべてのパラメーターを渡すことができます。

補足として、リスト内包表記は通常、新しいリストが必要なときに示され、副作用 (メッセージの送信など) では示されません。ここでは両方が必要なので、forループが適切です。

于 2013-08-22T22:49:57.787 に答える