Correct form management for user admin. remove unused form class.
--- a/src/ldt/ldt/user/admin.py Mon Jul 22 12:12:59 2013 +0200
+++ b/src/ldt/ldt/user/admin.py Mon Jul 22 18:46:20 2013 +0200
@@ -1,8 +1,12 @@
from django.contrib import admin
+from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import Group
+from django.utils.translation import gettext_lazy as _
from guardian.admin import GuardedModelAdmin
-from ldt.user.models import LdtUser
-from models import GroupProfile
+from ldt.user.forms import AdminUserCreationForm, AdminUserChangeForm
+from ldt.user.models import GroupProfile, LdtUser
+
+
class GroupProfileInline(admin.StackedInline):
model = GroupProfile
@@ -10,9 +14,10 @@
class GroupAdmin(GuardedModelAdmin):
inlines = [GroupProfileInline, ]
-class LdtUserAdmin(admin.ModelAdmin):
- pass
-
+class LdtUserAdmin(UserAdmin):
+ form = AdminUserChangeForm
+ add_form = AdminUserCreationForm
+ fieldsets = tuple(list(UserAdmin.fieldsets) + [(_('profile'), {'fields':('language','image')})])
admin.site.unregister(Group)
admin.site.register(Group, GroupAdmin)
--- a/src/ldt/ldt/user/forms.py Mon Jul 22 12:12:59 2013 +0200
+++ b/src/ldt/ldt/user/forms.py Mon Jul 22 18:46:20 2013 +0200
@@ -3,97 +3,11 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import Group
-from django.forms.util import ErrorList
from django.utils.translation import gettext as _
+import os
User = get_user_model()
-
-class LdtForm(UserCreationForm):
-
- class Meta:
- model = User
-
- def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
- initial=None, error_class=ErrorList, label_suffix=':',
- empty_permitted=False, instance=None):
-
- if instance:
- initial = initial or {}
-
- super(LdtForm, self).__init__(data, files, auto_id, prefix,
- initial, error_class, label_suffix, empty_permitted, instance)
-
- if instance:
- self.fields['password1'].required = False
- self.fields['password1'].label = _('New password')
- self.fields['password2'].required = False
- self.fields['password2'].label = _('New password confirmation')
-
- self._password_change = True
-
- def clean_username(self):
- if self.instance:
- return self.cleaned_data['username']
- return super(LdtForm, self).clean_username()
- def clean_password2(self):
- if self.instance and self.cleaned_data['password1'] == '' and self.cleaned_data['password2'] == '':
- self._password_change = False
- return u''
- return super(LdtForm, self).clean_password2()
-
-
- def save(self, commit=True):
- Super = self._password_change and LdtForm or UserCreationForm
- user = super(Super, self).save(commit=False)
- # if user.pk != None:
- # self.save_m2m()
-
- if commit:
- user.save()
-
- return user
-
-
-class EmailChangeForm(forms.Form):
- email1 = forms.EmailField(label=_("E-mail"), max_length=75)
- email2 = forms.EmailField(label=_("E-mail"), max_length=75)
-
- def __init__(self, user=None, *args, **kwargs):
- self.user = user
- super(EmailChangeForm, self).__init__(*args, **kwargs)
-
- def clean_email2(self):
- email1 = self.cleaned_data.get('email1')
- email2 = self.cleaned_data.get('email2')
- if email1 and email2:
- if email1 != email2:
- raise forms.ValidationError(_("The two emails didn't match."))
- return email2
-
-
- def save(self):
- self.user.email = self.cleaned_data['email1']
- self.user.save()
- return self.user
-
-
-class NameChangeForm(forms.Form):
- first_name = forms.CharField(label=_("First name"), max_length=30)
- last_name = forms.CharField(label=_("Last name"), max_length=30)
-
- def __init__(self, user=None, *args, **kwargs):
- self.user = user
- super(NameChangeForm, self).__init__(*args, **kwargs)
-
-
- def save(self):
- self.user.first_name = self.cleaned_data['first_name']
- self.user.last_name = self.cleaned_data['last_name']
- self.user.save()
- return self.user
-
-
class ProfileForm(UserChangeForm):
def __init__(self, user=None, *args, **kwargs):
@@ -104,6 +18,45 @@
class Meta:
model = User
fields = ('username', 'email', 'first_name', 'last_name', 'password')
+
+class AdminUserCreationForm(UserCreationForm):
+
+ 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 forms.ValidationError(self.error_messages['duplicate_username'])
+
+class AdminUserChangeForm(UserChangeForm):
+ language = forms.ChoiceField(label=_("Language"), choices=[(k,_(v)) for k,v in settings.LANGUAGES], initial=settings.LANGUAGE_CODE[:2])
+ image = forms.ImageField(label=_("Profile picture"), required=False)
+
+ def clean_image(self):
+ image = self.cleaned_data['image']
+
+ if not image:
+ return settings.DEFAULT_USER_ICON
+
+ if image and image.size > settings.PROFILE_IMG_MAX_SIZE:
+ raise forms.ValidationError(_("Image size is limited to %s" % settings.PROFILE_IMG_MAX_SIZE))
+
+ if image != self.instance.image:
+ filename = image.name
+ ext = filename.split(".")[-1]
+ image.name = os.path.join(os.path.dirname(filename),str(self.instance.id) + "." + ext)
+
+ return image
+
+
+ class Meta:
+ model = User
class LanguageChangeForm(forms.Form):
@@ -128,7 +81,7 @@
def clean_image(self):
image = self.cleaned_data['image']
-
+
if image and image.size > settings.PROFILE_IMG_MAX_SIZE:
raise forms.ValidationError(_("Image size is limited to %s" % settings.PROFILE_IMG_MAX_SIZE))
@@ -160,5 +113,7 @@
# We save the picture with the correct name
img_container.image = self.cleaned_data['image']
img_container.save()
- return self.model
+ return self.model
+
+
\ No newline at end of file
--- a/src/ldt/ldt/user/models.py Mon Jul 22 12:12:59 2013 +0200
+++ b/src/ldt/ldt/user/models.py Mon Jul 22 18:46:20 2013 +0200
@@ -53,7 +53,7 @@
class LdtUser(AbstractUser):
language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2])
- image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200)
+ image = ImageField(upload_to="thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200)
objects = LdtUserManager()
--- a/src/ldt/ldt/user/views.py Mon Jul 22 12:12:59 2013 +0200
+++ b/src/ldt/ldt/user/views.py Mon Jul 22 18:46:20 2013 +0200
@@ -1,4 +1,3 @@
-from .forms import ProfileForm, LanguageChangeForm, PictureForm
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordChangeForm
@@ -8,6 +7,7 @@
from django.utils import simplejson
from django.utils.translation import ugettext as _
from django.views.i18n import set_language
+from ldt.user.forms import ProfileForm, LanguageChangeForm, PictureForm
@login_required
def profile(request):