1- from django .contrib .auth .models import AbstractUser , BaseUserManager , Group as BaseGroup
1+ from django .contrib .auth .models import Group as BaseGroup
22from django .db import models
33from django .utils .translation import gettext_lazy as _
44
5- import shortuuid
65from model_utils .fields import AutoCreatedField
76from model_utils .models import TimeStampedModel
87from shortuuidfield import ShortUUIDField
98
10- from rest_auth_toolkit .models import BaseAPIToken , BaseEmailConfirmation
9+ from rest_auth_toolkit .managers import BaseEmailUserManager
10+ from rest_auth_toolkit .models import BaseEmailUser , BaseAPIToken , BaseEmailConfirmation
1111
1212
13- class UserManager (BaseUserManager ):
14- use_in_migrations = True
15-
16- def get_by_natural_key (self , email ):
17- return self .get (email = email )
18-
19- def _create_user (self , email , password , ** extra_fields ):
20- email = self .normalize_email (email )
21- user = self .model (email = email , ** extra_fields )
22- # XXX username is not automatically generated, don't understand why
23- # (same model in another project works well!)
24- if not user .username :
25- user .username = str (shortuuid .uuid ())
26- user .set_password (password )
27- user .save (using = self ._db )
28- return user
29-
30- def create_user (self , email , password = None , ** extra_fields ):
31- extra_fields .setdefault ('is_staff' , False )
32- extra_fields .setdefault ('is_superuser' , False )
33- return self ._create_user (email , password , ** extra_fields )
34-
35- def create_superuser (self , email , password , ** extra_fields ):
36- extra_fields .setdefault ('is_staff' , True )
37- extra_fields .setdefault ('is_superuser' , True )
38-
39- if not extra_fields ['is_staff' ]:
40- raise ValueError ('Superuser must have is_staff=True.' )
41- if not extra_fields ['is_superuser' ]:
42- raise ValueError ('Superuser must have is_superuser=True.' )
43-
44- return self ._create_user (email , password , ** extra_fields )
45-
13+ class UserManager (BaseEmailUserManager ):
4614 def get_or_create_facebook_user (self , facebook_data , facebook_access_token ):
4715 try :
4816 user = User .objects .get (email = facebook_data ['email' ])
@@ -62,31 +30,14 @@ def get_or_create_facebook_user(self, facebook_data, facebook_access_token):
6230 return user , False
6331
6432
65- class User (AbstractUser ):
66- """Custom user with email as login field."""
67- USERNAME_FIELD = 'email'
68- REQUIRED_FIELDS = []
69-
70- # Admin doesn't work well without username field; shortuuid provides
71- # a simple way to get unique string values at creation time.
72- username = ShortUUIDField ()
73- email = models .EmailField (max_length = 255 , unique = True )
33+ class User (BaseEmailUser ):
7434 facebook_id = models .CharField (
7535 max_length = 255 , null = True , blank = True , help_text = _ ('FB third-party ID' ))
7636 facebook_access_token = models .CharField (
7737 max_length = 255 , null = True , blank = True , help_text = _ ('FB access token' ))
7838
7939 objects = UserManager ()
8040
81- def __str__ (self ):
82- return self .email
83-
84- def get_short_name (self ):
85- return self .email
86-
87- def natural_key (self ):
88- return self .email
89-
9041
9142class Group (BaseGroup ):
9243 """Proxy model to have users and groups together in admin."""
0 commit comments