Пытаюсь создать свою модель и систему авторизации пользователей (по email и password) в джанго. Взял пример из оф. документации, определил нужные мне поля модели и админки. Создал пользователя через syncdb, защел в админку - все норм, но при попытке создания нового пользователя через админку, получаю ошибку:
ValueError at /admin/accounts/myuser/add/
too many values to unpack
В чем может быть проблема, ткните пальцем), пожалуйста!
models.py:
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
if not email:
raise ValueError(u'У пользователя обязательно должен быть указан e-mail!')
user = self.model(email=self.normalize_email(email),)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password):
user = self.create_user(email, password=password,)
user.is_admin = True
user.save(using=self._db)
return user
class MyUser(AbstractBaseUser):
email = models.EmailField(u'E-mail', max_length=128, unique=True)
firstname = models.CharField(u"Имя", max_length=64, blank=True)
lastname = models.CharField(u"Фамилия", max_length=128, blank=True)
post = models.CharField(u"Должность", max_length=256, blank=True)
phone = models.CharField(u"Телефон", max_length=32, blank=True)
key = models.CharField(u"UID", max_length=64, unique=True)
is_boss = models.BooleanField(u"Руководитель (босс)", default=False)
is_poweruser = models.BooleanField(u"Опытный пользователь", default=False)
is_simpleuser = models.BooleanField(u"Обычный пользователь", default=False)
is_active = models.BooleanField(u"Действующий пользователь", default=True)
is_admin = models.BooleanField(u"Админ", default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
class Meta:
verbose_name = u"пользователя"
verbose_name_plural = u"Пользователь"
def save(self, *args, **kwargs):
if not self.key:
hash_str = "%s + %s" % (self.email, str(datetime.utcnow()))
self.key = md5(hash_str).hexdigest()
super(MyUser, self).save(*args, **kwargs)
def get_hash_key(self):
return self.key
def get_full_name(self):
return self.email
def get_short_name(self):
return self.email
def __unicode__(self):
return u"%s" % self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
admin.py:
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label=u'Пароль', widget=forms.PasswordInput)
password2 = forms.CharField(label=u'Подтверждение пароля', widget=forms.PasswordInput)
class Meta:
model = MyUser
fields = ('email',)
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError(u"Пароли не совпадают")
return password2
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
class MyUserAdmin(UserAdmin):
add_form = UserCreationForm
fieldsets = (
(u"Пользователь", {'fields':
('email', 'password', 'key')
}),
(u'Личная информация', {'fields':
('firstname', 'lastname', 'post', 'phone')
}),
(u'Права доступа', {'fields':
('is_admin', 'is_boss', 'is_poweruser', 'is_simpleuser')
}),
)
add_fieldsets = (
(u"Создание нового пользователя", {
'classes': ('wide',),
'fields':
(
'email', 'password1', 'password2', ('firstname', 'lastname'), ('post', 'phone'),
('is_boss', 'is_poweruser', 'is_simpleuser')
)
}
)
)
list_display = list_display_links = ('firstname', 'lastname', 'email', 'is_admin',)
list_filter = ('is_admin',)
search_fields = ('email',)
ordering = ('email',)
filter_horizontal = ()
admin.site.register(MyUser, MyUserAdmin)
admin.site.unregister(Group)