from rest_framework import serializers from django.contrib.auth.password_validation import validate_password from .models import CustomUser, UserProfile class UserProfileSerializer(serializers.ModelSerializer): class Meta: model = UserProfile fields = ['bio', 'timezone', 'created_at', 'updated_at'] class UserRegistrationSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, required=True, validators=[validate_password]) password2 = serializers.CharField(write_only=True, required=True) profile = UserProfileSerializer(read_only=True) class Meta: model = CustomUser fields = ['email', 'username', 'password', 'password2', 'first_name', 'last_name', 'profile'] extra_kwargs = { 'first_name': {'required': True}, 'last_name': {'required': True} } def validate(self, attrs): if attrs['password'] != attrs['password2']: raise serializers.ValidationError({"password": "Password fields didn't match."}) return attrs def create(self, validated_data): validated_data.pop('password2') user = CustomUser.objects.create_user( email=validated_data['email'], username=validated_data['username'], password=validated_data['password'], first_name=validated_data['first_name'], last_name=validated_data['last_name'], ) return user class UserSerializer(serializers.ModelSerializer): profile = UserProfileSerializer(read_only=True) class Meta: model = CustomUser fields = ['id', 'email', 'username', 'first_name', 'last_name', 'phone_number', 'profile']