summaryrefslogtreecommitdiffstats
path: root/devel/views.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-03-29 21:46:25 +0200
committerDan McGee <dan@archlinux.org>2011-03-29 21:46:25 +0200
commit325b9d63d07cff73117258507e7cde592d2f824c (patch)
treea79dce474238840b5df00e51346c5a6ef505844b /devel/views.py
parent1ce650d3c3850020c6ba54766cb70ad049c6e0bd (diff)
downloadarchweb-325b9d63d07cff73117258507e7cde592d2f824c.tar.gz
archweb-325b9d63d07cff73117258507e7cde592d2f824c.tar.xz
Work out kinks in create new user view
We allowed repo selection before, but never actually called save_m2m() so selections would have to be repeated on the next page. Add in group selection as well to the form, and ensure we do all of our database operations in one transaction so it is a lot easier to test and roll back if things go wrong. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'devel/views.py')
-rw-r--r--devel/views.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/devel/views.py b/devel/views.py
index a6a51f2..a83c3bb 100644
--- a/devel/views.py
+++ b/devel/views.py
@@ -2,9 +2,10 @@ from django import forms
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import \
login_required, permission_required, user_passes_test
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Group
from django.contrib.sites.models import Site
from django.core.mail import send_mail
+from django.db import transaction
from django.shortcuts import get_object_or_404
from django.template import loader, Context
from django.views.decorators.cache import never_cache
@@ -123,6 +124,8 @@ class NewUserForm(forms.ModelForm):
private_email = forms.EmailField()
first_name = forms.CharField(required=False)
last_name = forms.CharField(required=False)
+ groups = forms.ModelMultipleChoiceField(required=False,
+ queryset=Group.objects.all())
class Meta:
model = UserProfile
@@ -145,8 +148,8 @@ class NewUserForm(forms.ModelForm):
"A user with that username already exists.")
return username
- def save(self):
- profile = forms.ModelForm.save(self, False)
+ def save(self, commit=True):
+ profile = super(NewUserForm, self).save(False)
pwletters = ascii_letters + digits
password = ''.join([random.choice(pwletters) for i in xrange(8)])
user = User.objects.create_user(username=self.cleaned_data['username'],
@@ -154,8 +157,13 @@ class NewUserForm(forms.ModelForm):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
+ # sucks that the MRM.add() method can't take a list directly... we have
+ # to resort to dirty * magic.
+ user.groups.add(*self.cleaned_data['groups'])
profile.user = user
- profile.save()
+ if commit:
+ profile.save()
+ self.save_m2m()
t = loader.get_template('devel/new_account.txt')
c = Context({
@@ -190,8 +198,11 @@ def new_user_form(request):
if request.POST:
form = NewUserForm(request.POST)
if form.is_valid():
- form.save()
- log_addition(request, form.instance.user)
+ @transaction.commit_on_success
+ def inner_save():
+ form.save()
+ log_addition(request, form.instance.user)
+ inner_save()
return HttpResponseRedirect('/admin/auth/user/%d/' % \
form.instance.user.id)
else: