Как сохранить набор объектов запроса в одной транзакции без использования цикла for в Django ORM
Небольшой вопрос, например, переменная posts имеет n объектов, и мне нужно сохранить id поста в модели post_tag, как я могу этого добиться без использования цикла for, а только с помощью одной транзакции, используя Django ORM.
Вот небольшой фрагмент того, чего я хочу достичь:
posts = Post_Tag.objects.filter(tag_id = subcat).values_list('post_id', flat = True)
for post in posts:
post_home_feed = Post_Home_Feed.objects.create(post_id = post.post_id, user_id = user_id.id)
Любая информация будет очень признательна, спасибо заранее.
Цикл for
не является проблемой, проблема в том, что вы делаете n обращений к базе данных для n объектов. Вы можете создавать объекты в bulk с помощью .bulk_create(…)
[Django-doc]:
posts = Post_Tag.objects.filter(tag_id=subcat).values_list('post_id', flat=True)
data = [
Post_Home_Feed(post_id=post.post_id, user_id=user_id.id)
for post in posts
]
Post_Home_Feed.objects.bulk_create(data)
Это позволит создать Post_Home_Feed
объектов в памяти и затем создать записи для всех этих объектов одним обращением к базе данных.
Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из
вPost_Home_Feed
PostHomeFeed
.