from django import forms from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User class UserCreationForm(forms.ModelForm): """ A form that creates a user, with no privileges, from the given username, email, and password. """ error_messages = { 'duplicate_username': _("A user with that username already exists."), } username = forms.RegexField( label=_("Username"), max_length=30, regex=r'^[\w\-.]+$' ) password = forms.CharField( label=_("Password"), widget=forms.PasswordInput ) class Meta: model = User fields = ("username", "email") 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._default_manager.get(username=username) except User.DoesNotExist: return username raise forms.ValidationError(self.error_messages['duplicate_username']) def save(self, commit=True): user = super(UserCreationForm, self).save(commit=False) user.set_password(self.cleaned_data["password"]) if commit: user.save() return user