Skip to content
Snippets Groups Projects
Commit 4cf77e1b authored by Chris Li's avatar Chris Li
Browse files

Enable modify username and email.

parent 9889b7ac
No related branches found
No related tags found
1 merge request!3Enable modify username and email.
from rest_framework import serializers from rest_framework import serializers
from django_countries.serializers import CountryFieldMixin
from django.contrib.auth.models import User
from core.models.profile import Profile from core.models.profile import Profile
class UserUpdateSerializer(serializers.Serializer):
username = serializers.CharField(required=False)
email = serializers.EmailField(required=False)
def validate(self, data):
if 'username' in data and User.objects.filter(username=data['username']).count() != 0:
raise serializers.ValidationError({
'username': "This username is being used by others."
})
if 'email' in data and User.objects.filter(username=data['email']).count() != 0:
raise serializers.ValidationError({
'email': "This email address is being used by others."
})
return data
def update(self, instance, validated_data):
instance.username = validated_data.get('username', instance.username)
instance.email = validated_data.get('email', instance.email)
if validated_data.get('email', None):
instance.is_active = False
instance.save()
return instance
class ProfileSerializer(CountryFieldMixin, serializers.ModelSerializer):
user = UserUpdateSerializer(required=False)
class ProfileSerializer(serializers.ModelSerializer):
country = serializers.CharField()
class Meta: class Meta:
model = Profile model = Profile
fields = ('user', 'bio', 'birthday', 'country', 'city', 'affiliation', 'photo') fields = ('user', 'bio', 'birthday', 'country', 'city', 'affiliation', 'photo')
def update(self, instance, validated_data):
user_data = validated_data.get('user', None)
if user_data:
user = instance.user
user_serializer = UserUpdateSerializer(data=user_data)
user_serializer.is_valid(raise_exception=True)
user_serializer.update(user, user_data)
for attr in self.Meta.fields:
if attr == 'user':
continue
setattr(instance, attr, validated_data.get(attr, getattr(instance, attr)))
instance.save()
return instance
...@@ -20,7 +20,7 @@ def create_related_profile(sender, instance, created, *args, **kwargs): ...@@ -20,7 +20,7 @@ def create_related_profile(sender, instance, created, *args, **kwargs):
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
def send_activation_email(sender, instance, created, *args, **kwargs): def send_activation_email(sender, instance, created, *args, **kwargs):
# send an e-mail to the user # send an e-mail to the user
if instance and created: if instance and (created or not instance.is_active):
context = { context = {
'current_user': instance, 'current_user': instance,
'username': instance.username, 'username': instance.username,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment