up votedown votefavorite
<http://stackoverflow.com/questions/40307147/create-a-new-custom-user-or-upate-existing-one#>
I have created a Custom user model:
class CUserManager(BaseUserManager):
def _create_user(self, email, first_name, password,
is_staff, is_superuser, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
now = timezone.now()
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email,
first_name = first_name,
is_staff=is_staff, is_active=False,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, first_name, password=None, **extra_fields):
return self._create_user(email, first_name, password, False, False,
**extra_fields)
def create_superuser(self, email, first_name, password, **extra_fields):
return self._create_user(email, first_name, password, True, True,
**extra_fields)
class CUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), max_length=254, unique=True)
first_name = models.CharField(_('first name'), max_length=30)
last_name = models.CharField(_('last name'), max_length=30, blank=True)
is_staff = models.BooleanField(_('staff status'), default=False,
help_text=_('Designates whether the user can log into this admin '
'site.'))
is_active = models.BooleanField(_('active'), default=False,
help_text=_('Designates whether this user should be treated as '
'active. Unselect this instead of deleting accounts.'))
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
last_updated = models.DateTimeField(_('last updated'), default=timezone.now)
image = ProcessedImageField(upload_to= generate_random_filename,
processors=[ResizeToFill(640, 640)],
format='JPEG',
options={'quality': 60})
objects = CUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
def save(self, *args, **kwargs):
try:
this = CUser.objects.get(id=self.id)
if this.image != self.image:
this.image.delete()
except: pass
super(CUser, self).save(*args, **kwargs)
My registration serializer:
class UserRegistrationSerializer(serializers.ModelSerializer):
password = serializers.CharField(style={'input_type': 'password'},
write_only=True,
validators=settings.get('PASSWORD_VALIDATORS'))
class Meta:
model = User
fields = tuple(User.REQUIRED_FIELDS) + (
User.USERNAME_FIELD,
'image',
'password',
)
def create(self, validated_data):
if settings.get('SEND_ACTIVATION_EMAIL'):
with transaction.atomic():
user = User.objects.create_user(**validated_data)
user.is_active = False
user.save(update_fields=['is_active'])
else:
user = User.objects.create_user(**validated_data)
return user
My registration view:
class RegistrationView(generics.CreateAPIView):
serializer_class = serializers.UserRegistrationSerializer
permission_classes = (
permissions.AllowAny,
)
def perform_create(self, serializer):
user = serializer.save()
signals.user_registered.send(sender=self.__class__, user=user,
request=self.request)
if settings.get('SEND_ACTIVATION_EMAIL'):
self.send_activation_email(user)
elif settings.get('SEND_CONFIRMATION_EMAIL'):
self.send_confirmation_email(user)
This creates a new user. But, when I try to hit this endpoint with some
already registered email, I get an error. Instead of this, I want to update
the user entry in case the user is not active and wants to register again.
I am unable to figure this out. I tried using the update() method in the
serializer but it didn't work. Please help.
I have alo posted this ques on stackoverflow.
<http://stackoverflow.com/questions/40307147/create-a-new-custom-user-or-upate-existing-one>
--
You received this message because you are subscribed to the Google Groups
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.