2013-08-22 13 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)  

내가이 오류를 얻을 : 각 메시지는이 내가 시도 무엇을 내가 (게이트웨이) .send 호출 할 필요가 생성 된 아이디로 처리 할 수 ​​

작업 요청 3ab72d3c-5fd8-4b7d을-8cc5- e0400455334f 예외 발생 : 'AttributeError ("\'없음 유형 \ '객체의 속성이 \'pk \ '"인 속성 없음)'

왜?

답변

4

query의 각 요소에 send을 호출하여 objs 목록을 만듭니다. 아마도 send은 아무 것도 반환하지 않고 None의 목록을 얻습니다. 이 시도 :

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

Message.objects.bulk_create(objs) 

**kwargs 당신이 메시지에 전달 된 모든 매개 변수에 대해 단지 자리 표시 자입니다. 사전을 사용하거나 원본 코드에서와 같이 모든 매개 변수를 전달할 수 있습니다.

보조 메모로 일반적으로 목록 작성은 새로운 목록을 원할 때 표시되며 부작용 (예 : 메시지 보내기)은 필요하지 않습니다. 여기에서는 두 가지 모두를 원하므로 for 루프가 적절합니다.

+0

대량으로 완료 될 때까지 저장되지 않았기 때문에 보내기가 DB에 저장 될 때만 호출 할 수 있다고 생각합니까? 문제가 아닌지 확인하십시오. – GrantU

+0

그런 경우 원래 'send'도 실패합니다 (내 제안은 그 점에있어 아무 것도 바뀌지 않습니다). 그러나'.send (gateway) '없이리스트 이해를하고'bulk_create'를 호출 한 후에'objs' 메시지 객체에 대해'for' 루프를 수행하여 각각을'send'해야합니다. –

+0

감사합니다. @PauloAlmeida. 그것은 나를 위해 완벽하게 작동합니다. –

관련 문제