Как сохранить набор объектов запроса в одной транзакции без использования цикла 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.

Вернуться на верх