# HG changeset patch # User ymh # Date 1374499877 -7200 # Node ID 702760606a16c43ed2579aa7d3f0b56d90a974c7 # Parent 5ecca4fe3ddd4352499659b4e0a2f2506e954e93 correct pb when creating users diff -r 5ecca4fe3ddd -r 702760606a16 src/jocondelab/admin.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',)})]) diff -r 5ecca4fe3ddd -r 702760606a16 src/jocondelab/forms.py --- 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