--- a/src/jocondelab/admin.py Fri Jul 19 23:00:50 2013 +0200
+++ b/src/jocondelab/admin.py Mon Jul 22 15:31:17 2013 +0200
@@ -1,19 +1,13 @@
-from .models import User
-from django.conf import settings
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
-from django.contrib.auth.forms import UserChangeForm as AuthUserChangeForm
-from django.forms.fields import ChoiceField
from django.utils.translation import gettext_lazy as _
-
+from jocondelab.forms import UserChangeForm, UserCreationform
+from jocondelab.models import User
-class UserChangeForm(AuthUserChangeForm):
- language = ChoiceField(label=_("language"), choices=[(k,_(v)) for k,v in settings.LANGUAGES], initial=settings.LANGUAGE_CODE[:2])
- class Meta:
- model = User
class UserAdmin(AuthUserAdmin):
form = UserChangeForm
+ add_form = UserCreationform
fieldsets = tuple(list(AuthUserAdmin.fieldsets) + [(_('language'), {'fields':('language',)})])
--- a/src/jocondelab/forms.py Fri Jul 19 23:00:50 2013 +0200
+++ b/src/jocondelab/forms.py Mon Jul 22 15:31:17 2013 +0200
@@ -6,9 +6,14 @@
'''
from core.models import (Thesaurus, Term, TERM_URL_STATUS_CHOICES_TRANS,
TERM_WK_LINK_SEMANTIC_LEVEL_CHOICES_TRANS)
-from django.forms import Form, fields, ModelChoiceField
+from django.contrib.auth import get_user_model
+from django.contrib.auth.forms import (UserChangeForm as AuthUserChangeForm,
+ UserCreationForm as AuthUserCreationForm)
+from django.forms import Form, fields, ModelChoiceField, ValidationError
+from django.forms.fields import ChoiceField
from django.forms.util import flatatt
-from django.forms.widgets import Widget, Select, NullBooleanSelect as DjangoNullBooleanSelect
+from django.forms.widgets import (Widget, Select,
+ NullBooleanSelect as DjangoNullBooleanSelect)
from django.utils import formats
from django.utils.encoding import force_text
from django.utils.html import format_html, escape
@@ -17,6 +22,8 @@
from jocondelab import settings
import json
+User = get_user_model()
+
class ThesaurusTreeWidget(Widget):
def _format_value(self, value):
@@ -137,4 +144,22 @@
return qs
-
\ No newline at end of file
+class UserCreationform(AuthUserCreationForm):
+ class Meta:
+ model = User
+
+ def clean_username(self):
+ # Since User.username is unique, this check is redundant,
+ # but it sets a nicer error message than the ORM. See #13147.
+ username = self.cleaned_data["username"]
+ try:
+ User.objects.get(username=username)
+ except User.DoesNotExist:
+ return username
+ raise ValidationError(self.error_messages['duplicate_username'])
+
+
+class UserChangeForm(AuthUserChangeForm):
+ language = ChoiceField(label=_("language"), choices=[(k,_(v)) for k,v in settings.LANGUAGES], initial=settings.LANGUAGE_CODE[:2])
+ class Meta:
+ model = User