42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
# api/user/serializers.py
|
|
from rest_framework import serializers
|
|
from .models import UserProfile
|
|
from django.contrib.auth.models import User
|
|
|
|
|
|
class UserProfileSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = ["show_mature"]
|
|
|
|
def update(self, instance, validated_data):
|
|
# Use setattr to assign values to the instance fields
|
|
for attr, value in validated_data.items():
|
|
setattr(instance, attr, value)
|
|
instance.save() # Save the changes to the database
|
|
return instance
|
|
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
profile = UserProfileSerializer(source="userprofile", read_only=False)
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = ["username", "email", "first_name", "last_name", "profile"]
|
|
|
|
def update(self, instance, validated_data):
|
|
# Extract profile data if it exists
|
|
profile_data = validated_data.pop("userprofile", None)
|
|
|
|
# Update the UserProfile instance
|
|
if profile_data:
|
|
userprofile_instance = instance.userprofile # The related UserProfile instance
|
|
profile_serializer = self.fields["profile"] # Get the nested serializer
|
|
profile_serializer.update(userprofile_instance, profile_data) # Update the UserProfile
|
|
|
|
# Update the User fields
|
|
for attr, value in validated_data.items():
|
|
setattr(instance, attr, value)
|
|
instance.save() # Save the User instance
|
|
return instance
|
|
|