correct pb when creating users
authorymh <ymh.work@gmail.com>
Mon, 22 Jul 2013 15:31:17 +0200
changeset 75 702760606a16
parent 74 5ecca4fe3ddd
child 76 33a82766e9f9
correct pb when creating users
src/jocondelab/admin.py
src/jocondelab/forms.py
--- 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