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

Merge branch 'chris/feature/profile-update-username-and-email' into 'main'

Enable modify username and email.

See merge request !3
parents 9889b7ac 4cf77e1b
No related branches found
No related tags found
1 merge request!3Enable modify username and email.
from rest_framework import serializers
from django_countries.serializers import CountryFieldMixin
from django.contrib.auth.models import User
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:
model = Profile
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):
@receiver(post_save, sender=User)
def send_activation_email(sender, instance, created, *args, **kwargs):
# send an e-mail to the user
if instance and created:
if instance and (created or not instance.is_active):
context = {
'current_user': instance,
'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