如何在不使用 Django ORM 中的 for 循环的情况下在单个事务中保存查询对象集

How to Save a Query Set of Objects in a Single Transaction without using a for loop in Django ORM

只是一个简单的问题,例如,posts 变量有 n 个对象,我需要将 post 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_create(…) [Django-doc]:

bulk 中创建对象
posts = Post_Tag.objects.filter(tag_id=subcat).values_list('post_id', flat=True)

<strong>data</strong> = [
    <strong>Post_Home_Feed(post_id=post.post_id, user_id=user_id.id)</strong>
    for post in posts
]
Post_Home_Feed.objects<strong>.bulk_create(data)</strong>

这将因此在内存中创建Post_Home_Feed个对象,然后通过一次访问数据库为所有这些对象创建记录。


Note: Models in Django are written in PascalCase, not snake_case, so you might want to rename the model from Post_Home_Feed to PostHomeFeed.