Hello,

I don't quite get the code in your method: 'MyUserManager.create_user':
    user.set_password(self.cleaned_data["password"])

You're in your Manager method but call self.cleaned_data ?

You can set a breakpoint inside your method with pdb to see
what's going on with your fields?


On 11/12/2015 04:11 PM, Benjamin Smith wrote:
I have my own custom User model, and its own Manger too.

Models:

    class MyUser(AbstractBaseUser, PermissionsMixin):
        email = models.EmailField(max_length=255, unique=True)
        first_name = models.CharField(max_length=35)
        last_name = models.CharField(max_length=35)
        username = models.CharField(max_length=70, unique=True)
        date_of_birth = models.DateField()
        is_active = models.BooleanField(default=True)
        is_admin = models.BooleanField(default=False)

        @property
        def is_staff(self):
            return self.is_admin

        def get_full_name(self):
            return ('%s %s') % (self.first_name, self.last_name)

        def get_short_name(self):
            return self.username

        objects = MyUserManager()
        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = ['first_name', 'last_name', 'username',
    'date_of_birth']


Manager:

    class MyUserManager(BaseUserManager):
        def create_user(self, email, first_name, last_name, username,
    date_of_birth, password=None, **kwargs):
            if not email:
                raise ValueError('User must have an email address')

            user = self.model(
                email=self.normalize_email(email),
                first_name=first_name,
                last_name=last_name,
                username=username,
                date_of_birth=date_of_birth,
                **kwargs
            )
    user.set_password(self.cleaned_data["password"])
            user.save(using=self._db)
            return user

        def create_superuser(self, email, first_name, last_name,
    username, date_of_birth, password, **kwargs):
            user = self.create_user(
                email,
                first_name=first_name,
                last_name=last_name,
                username=username,
                date_of_birth=date_of_birth,
                password=password,
                is_superuser=True,
                **kwargs
            )
            user.is_admin = True
            user.save(using=self._db)
            return user


Everything works when creating a new user without any errors. But when I try to login I can't. So I checked the user's email and password to confirm. Then I noticed that the password is displayed as plain text (eg. *strongpassword)*, and when changed the admin form to get the hashed password using *ReadOnlyPasswordHashField()* I get an error inside the password field, even though I used *set_password()* for the Manger inside the *create_user()* function.

    /Invalid password format or unknown hashing algorithm/


However, if I manually do *set_password('strongpassword')* for that user inside the console, then only the password is hashed. Could you please help me solve this problem. 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 django-users+unsubscr...@googlegroups.com <mailto:django-users+unsubscr...@googlegroups.com>. To post to this group, send email to django-users@googlegroups.com <mailto:django-users@googlegroups.com>.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAM4YLWJNGdSj-rVAuhta_UA50Cjna8zg-c14FPxK%3DtdU49mngQ%40mail.gmail.com <https://groups.google.com/d/msgid/django-users/CAM4YLWJNGdSj-rVAuhta_UA50Cjna8zg-c14FPxK%3DtdU49mngQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.

--
aRkadeFR

--
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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/5644AE3A.5050609%40arkade.info.
For more options, visit https://groups.google.com/d/optout.

Reply via email to