В обращении к следующему 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)
на каждый созданный объект.
Использование навалом создать я, кажется, не beable сделать это, потому что ПК не обязательно для 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
Просто любопытство: как миллионы объектов вписываются в строку запроса? Я имею в виду, что вы настроили свой db или сделали некоторые оптимизации django-side? Я предполагаю, что было бы сложно отправить несколько мегабайт запросов на сервер. –