2012-05-29 2 views
3

Если я использую bulk_create для вставки объектов:Выбор/запрос объектов из django bulk_create?

objList = [a, b, c,] #none are saved 
model.objects.bulk_create(objList) 

В идентификаторы объектов не будет обновляться (см https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create). Поэтому я не могу использовать этих парней в качестве объектов внешнего ключа. Я думал о том, чтобы запросить их обратно из базы данных после их создания навалом, а затем использовать их как объекты внешнего ключа, но у меня нет их идентификаторов для их запроса. Как я могу запросить эти объекты из базы данных (учитывая, что в столбцах, отличных от идентификатора, могут быть повторяющиеся значения)? Или есть лучший способ сделать массовые созданные объекты внешними ключами?

ответ

1

Если у вас есть только три объекта, как в вашем примере, вы можете захотеть вызывать сохранение в каждом отдельном случае, обертывая вызовы внутри транзакции, если это должно быть атомарно.

Если есть много других причин, которые, вероятно, являются причиной использования bulk_create, вы можете потенциально перебрать их через них и вызвать сохранение для каждого. Опять же, вы можете обернуть это при транзакции, если это необходимо. Хотя, возможно, этот вариант не понравится, так как запущенные тонны запросов вставки могут быть проблемой для некоторых настроек базы данных.

В качестве альтернативы, взломам было бы добавить некоторый известный уникальный идентификатор объекта, чтобы вы могли повторно запросить их после сохранения.