def edit_user(request, membership, user=None): """ Edit an existing user, or add a new one if no user specified """ # Make sure that we are attempting to attach to a valid # membership. try: membership = Membership.objects.get(id=membership) except ObjectDoesNotExist: error = "That Membership does not appear to exist." return error_404(request, error) # And make sure that we're talking about a valid user, if user was # specified. if user: user = int(user) try: user = User.objects.get(id=user) profile = UserProfile.objects.get(user=user) except ObjectDoesNotExist: error = """That user does not exist, or you are attempting to edit a user without a profile (you must use the admin interface to edit this sort of user).""" return error_404(request, error) if request.method == 'POST': if user: # save changes to an existing user user_form = UserForm(request.POST, instance=user) profile_form = UserProfileForm(request.POST, instance=profile) if user_form.is_valid() and profile_form.is_valid(): user = user_form.save() profile = profile_form.save() return HttpResponseRedirect( '/memberships/' + str(membership.id) + '/view/' ) else: template = 'edit_user.html' ctxt = { 'request' : request, 'membership' : membership, 'user' : user.id, 'edit_user' : user_form, 'edit_profile' : profile_form, 'page_name' : 'Edit User', 'media_url' : MEDIA_URL, } return render_to_response(template, ctxt) else: # save a new user user_form = UserForm(request.POST) profile_form = UserProfileForm(request.POST) if user_form.is_valid() and profile_form.is_valid(): user = user_form.save() profile = profile_form.save(commit=False) profile.user = User.objects.get(id=user.id) profile.membership = membership profile.save() profile_form.save_m2m() # try: # Try to send an email w/ password reset link to # the user subject = "Boston Mycological Club Account " subject += "Created" email_template = 'registration/new_user_email.html' ctxt = { 'user' : user, 'media_url' : MEDIA_URL, } message = loader.get_template(email_template) message = message.render(Context(ctxt)) send_mail(subject, message, SERVER_EMAIL, [user.email], fail_silently=False, ) # except: # error = "Account created, but email was not sent" # return error_404(request, error) return HttpResponseRedirect( '/memberships/' + str(membership.id) + '/view/' ) else: template = 'edit_user.html' ctxt = { 'request' : request, 'membership' : membership, 'user' : None, 'edit_user' : user_form, 'edit_profile' : profile_form, 'page_name' : 'Create User', 'media_url' : MEDIA_URL, } return render_to_response(template, ctxt) elif user: template = 'edit_user.html' ctxt = { 'request' : request, 'membership' : membership, 'user' : user.id, 'edit_user' : UserForm(instance=user), 'edit_profile' : UserProfileForm(instance=profile), 'page_name' : 'Edit User', 'media_url' : MEDIA_URL, } return render_to_response(template, ctxt) else: # return a blank user form template = 'edit_user.html' ctxt = { 'request' : request, 'membership' : membership, 'user' : None, 'edit_user' : UserForm(), 'edit_profile' : UserProfileForm(), 'page_name' : 'Create User', 'media_url' : MEDIA_URL, } return render_to_response(template, ctxt)