from rest_framework_simplejwt.serializers import TokenObtainPairSerializer from rest_framework import serializers from . import models class CustomUserSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, required=True, style={'input_type': 'password'}) class Meta: model = models.CustomUser fields = ('id', 'email', 'full_name', 'role', 'password', 'is_active', 'notify') class CustomUserAdminSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, required=False, style={'input_type': 'password'}) class Meta: model = models.CustomUser fields = ('id', 'email', 'full_name', 'role', 'password', 'is_active', 'notify') def update(self, instance, validated_data): for key, value in validated_data.items(): instance.__dict__[key] = value if 'password' in validated_data: instance.set_password(validated_data['password']) instance.save() return instance class CreatorSerializer(serializers.ModelSerializer): class Meta: model = models.CustomUser fields = ('email',) class ChangePasswordSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, required=True) password2 = serializers.CharField(write_only=True, required=True) old_password = serializers.CharField(write_only=True, required=True) class Meta: model = models.CustomUser fields = ('old_password', 'password', 'password2') def validate(self, attrs): if attrs['password'] != attrs['password2']: raise serializers.ValidationError({"password": "Password fields didn't match."}) return attrs def validate_old_password(self, value): user = self.context['request'].user if not user.check_password(value): raise serializers.ValidationError({"old_password": "Old password is not correct"}) return value def update(self, instance, validated_data): instance.set_password(validated_data['password']) instance.save() return instance class UpdateUserSerializer(serializers.ModelSerializer): email = serializers.EmailField(required=True) class Meta: model = models.CustomUser fields = ('full_name', 'email') def validate_email(self, value): user = self.context['request'].user if models.CustomUser.objects.exclude(pk=user.pk).filter(email=value).exists(): raise serializers.ValidationError({"email": "This email is already in use."}) return value def update(self, instance, validated_data): for key, value in validated_data.items(): instance.__dict__[key] = value instance.save() return instance