I don't see a way to do it without having an inner iteration that populates a list of models and an outer iteration that executes a bulk_create on that list.

Or, are you talking about doing something like the following (it doesn't eliminate the outer loop, but uses different syntax for the inner and outer loops):

    while True:
        batch = [model(user_id=user_id) for user_id in user_ids[:batch_size]]
        if batch:
            model.objects.bulk_create(batch)
            total += len(batch) #if you wanted to calculate the total as you go
        else:
            break

If it's something else you're thinking of, can you post some pseudo-code?