def create(request): errors = [] status = '' if 'submit' in request.POST: user = User() username = request.POST.get('username') if username: if User.objects.filter(username=username).count() < 1: user.username = username else: errors += ['username', 'username_already_taken'] else: errors += ['username', 'invalid_username'] from django.core.validators import validate_email from django.core.exceptions import ValidationError email = request.POST.get('email') try: validate_email(email) if User.objects.filter(email=email).count() < 1: user.email = email else: errors += ['email', 'email_already_taken'] except ValidationError: errors += ['email', 'invalid_email'] user.first_name = request.POST.get('first_name') user.last_name = request.POST.get('last_name') password = generate_password() user.set_password(password) if len(errors) < 1: user.save() # Save the user first in order to create relational objects profile = UserProfile(user=user) profile.title = request.POST.get('title') profile.display_name = request.POST.get('display_name') profile.school = request.POST.get('school') profile.bio = request.POST.get('bio') profile.grade = request.POST.get('grade') profile.phone = request.POST.get('phone') profile.comment = request.POST.get('comment') profile.save() for group_id in request.POST.getlist('groups'): try: user.groups.add(Group.objects.get(id=group_id)) except Group.DoesNotExist: pass user.save() # Save the groups information if request.POST.get('send_welcome_letter'): context = { 'sender': request.user, 'receiver': user, 'password': password, 'groups': [g.name for g in user.groups.all()], } sender_address = format_address(request.user.profile.name(), request.user.email) receiver_address = format_address(user.profile.name(), user.email) send_template_mail(sender_address, receiver_address, 'mail/user_welcome.html', context) status = 'success' else: status = 'error' return render(request, 'users/create.html', { 'categories': sorted_categories(), 'errors': errors, 'status': status, })