from optparse import make_option from django.core.management.base import BaseCommand, CommandError from django.contrib.auth.models import User, Group class Command(BaseCommand): option_list = BaseCommand.option_list + ( make_option('--list', action='store_true', dest='list', default=False, help='List available groups'), make_option('--create', action='store_true', dest='create', default=False, help='Create the group if it does not exist'), make_option('--remove', action='store_true', dest='remove', default=False, help='Remove the user from the group instead of adding it'), ) args = ' ' help = 'Add a user to a group' def print_groups(self): print 'Groups available:' for group in Group.objects.all().distinct(): print ' ', group.name def handle(self, *args, **options): if options['list']: self.print_groups() return if len(args) != 2: raise CommandError('Usage is add_to_group {0}'.format(self.args)) name_or_email, group_name = args if '@' in name_or_email: user = User.objects.get(email=name_or_email) else: user = User.objects.get(username=name_or_email) try: group = Group.objects.get(name=group_name) except Group.DoesNotExist: if options['create']: group = Group(name=group_name) group.save() else: raise CommandError('Group {} does not exist'.format(group_name)) if options['remove']: user.groups.remove(group) else: user.groups.add(group) print 'Success!'