Python Django对象没有属性

Python Django对象没有属性,python,django,django-models,Python,Django,Django Models,我有一个批量更新。我需要调用创建的每条消息。发送(网关)这是我尝试过的: objs = [ Message( recipient_number=e.mobile, content=content, sender=e.contact_owner,

我有一个批量更新。我需要调用创建的每条消息。发送(网关)这是我尝试过的:

  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\'对象没有属性'pk\'”,)'


为什么?

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
循环是合适的。

您正在通过调用
send
query
的每个元素创建
objs
列表。大概,
send
不会返回任何内容,您会得到一个
None
列表。试试这个:

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

Message.objects.bulk_create(objs)
**kwargs
只是传递给消息的所有参数的占位符。您可以使用字典,也可以像原始代码一样传递所有参数


作为补充说明,列表理解通常在您需要新列表时指示,而不是用于副作用(如发送消息)。这里您想要两者,因此
for
循环是合适的。

我认为只有在保存到数据库时才能调用send,因为它在批量完成之前不会保存。您确定这不是问题所在吗?如果是这样,您原来的
send
也会失败(我的建议在这方面没有任何改变)。但是,在调用
bulk\u create
之后,您应该在不使用
.send(gateway)
的情况下执行列表理解,并在
objs
消息对象上执行
for
循环,以
发送它们中的每一个。我认为只有在保存到数据库时才能调用send,由于它在批量完成之前不会保存,您确定这不是问题吗?如果是这样,您原来的
send
也会失败(我的建议在这方面没有任何改变)。但是,在调用
bulk\u create
之后,您应该在不使用
.send(gateway)
的情况下执行列表理解,并在
objs
消息对象上执行
for
循环,以
发送每个对象。