I think you could consider using https://docs.djangoproject.com/en/dev/ref/models/querysets/#update for efficiency if not in dry run mode.  Since this is pretty much the behavior you're duplicating.