I have a made custom user model.

class CustomUserManager(BaseUserManager):
    def _create_user(self, email, username, password, first_name,
last_name, date_of_birth, gender, mobile_number,
                     is_active, is_admin, is_superuser):
        """
        Creates and saves a user with given email and password
        """
        if not email:
            raise ValueError('Email must be set')

        email = self.normalize_email(email)
        now = timezone.now()

        user = self.model(
            email=email,
            username=username,
            first_name=first_name,
            last_name=last_name,
            date_of_birth=date_of_birth,
            gender=gender,
            mobile_number=mobile_number,
            date_joined=now,
            is_active=is_active,
            is_admin=is_admin,
            is_superuser=is_superuser,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, email, username, password, first_name, last_name,
date_of_birth, gender, mobile_number, **extra_fields):
        user = self._create_user(email, username, password, first_name,
last_name, date_of_birth, gender, mobile_number, True, False, False,
**extra_fields)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password, first_name,
last_name, date_of_birth, gender, mobile_number, **extra_fields):
        user = self._create_user(email, username, password, first_name,
last_name, date_of_birth, gender, mobile_number, True, True, True,
**extra_fields)
        user.save(using=self._db)
        return user


class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), max_length=254,
unique=True)
    username = models.CharField(_('user name'), max_length=254, unique=True)
    first_name = models.CharField(_('first name'), max_length=30)
    last_name = models.CharField(_('last name'), max_length=30)
    date_of_birth = models.DateField()
    gender = models.CharField(choices=GENDERTYPE, max_length=1)
    mobile_number = models.IntegerField(unique=True)
    date_joined = models.DateTimeField(_('date joined'),
default=timezone.now)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name',
'date_of_birth', 'gender', 'mobile_number']
    ...
    ...

And to process the model, I have a custom user creation forms.py

class UserCreationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)

    class Meta:
        model = CustomUser
        fields = ('email', 'username', 'first_name', 'last_name',
'date_of_birth', 'gender', 'mobile_number')

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super(UserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password"])
        print self.cleaned_data["password"]
        if commit:
            user.save()
        return user


class UserChangeForm(forms.ModelForm):
    password = ReadOnlyPasswordHashField()

    class Meta:
        model = CustomUser
        fields = (
            'email', 'username', 'first_name', 'last_name',
'date_of_birth', 'gender', 'mobile_number', 'is_active',
            'is_admin'
        )

    def clean_password(self):
        return self.initial["password"]

I can save and create a new user. Also I can see the hashed password in the
admin. However when I try to login with the `email` and `password` of the
new user, I am not being authenticated. To check if I am actually getting
any password, I tried printing the *self.cleaned_data["password"] *in the
UserCreationForm, and in the console I can see the password I gave. What am
I doing wrong here? Please help me.

Thank you.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CA%2B4-nGpF5MBCa3n182UKQcgDiAu1L_GKw1Q0uUyh6EQBaQQz%3DA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to