def merge_objects(models, group, new_group, limit=1000,
logger=None):
has_more = False
for model in models:
if logger is not None:
logger.info('Merging %r objects where %r into %r', model, group,
new_group)
for obj in model.objects.filter(group=group)[:limit]:
try:
with transaction.atomic(using=router.db_for_write(model)):
model.objects.filter(
id=obj.id
).update(group=new_group)
except IntegrityError:
delete = True
else:
delete = False
if delete:
obj.delete()
has_more = True
if has_more:
return True
return has_more
评论列表
文章目录