Django 一次更新一对相关对象的原子事务
我有一个简单的任务-将所有用户及其配置文件标记为“is_active”,我这样做:Django 一次更新一对相关对象的原子事务,django,Django,我有一个简单的任务-将所有用户及其配置文件标记为“is_active”,我这样做: users = User.objects.all().select_related('profile') for user in users: user.is_active = True user.profile.is_active = True user.save() user_profile.save() 有时它会破坏数据,因此用户的处于活动状态,而用户配置文件的处于活动状
users = User.objects.all().select_related('profile')
for user in users:
user.is_active = True
user.profile.is_active = True
user.save()
user_profile.save()
有时它会破坏数据,因此用户的处于活动状态,而用户配置文件的处于活动状态并不总是同步
我能想到的最佳方案是将这两个.save()都包装到原子事务中
from django.db import transaction
users = User.objects.all().select_related('profile')
for user in users:
user.is_active = True
user.profile.is_active = True
with transaction.atomic():
user.save()
user_profile.save()
那么,它应该工作吗?)问题是-可能是整个块,包括users=User.objects.all()。select_related('profile')
应该包装在transaction.atomic()中
另外,由于内部逻辑复杂,我无法使用.update()我不确定是否正确理解了您的问题。 但您可以使用单个save方法调用来执行原子事务
- 例如:
user.save(update_fields=('is_active', 'profile__is_active'))