Files
thrillwiki_django_no_react/apps/api/v1/accounts/serializers.py
pacnpal 75cc618c2b update
2025-09-21 20:04:42 -04:00

87 lines
2.6 KiB
Python

from rest_framework import serializers
from drf_spectacular.utils import extend_schema_field
from apps.accounts.models import UserProfile, TopList, TopListItem
from apps.accounts.serializers import UserSerializer # existing shared user serializer
class UserProfileCreateInputSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = "__all__"
class UserProfileUpdateInputSerializer(serializers.ModelSerializer):
class Meta:
model = UserProfile
fields = "__all__"
extra_kwargs = {"user": {"read_only": True}}
class UserProfileOutputSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
avatar_url = serializers.SerializerMethodField()
class Meta:
model = UserProfile
fields = "__all__"
@extend_schema_field(serializers.URLField(allow_null=True))
def get_avatar_url(self, obj) -> str | None:
"""Get user avatar URL"""
# Safely try to return an avatar url if present
avatar = getattr(obj, "avatar", None)
if avatar:
return getattr(avatar, "url", None)
user_profile = getattr(obj, "user", None)
if user_profile and getattr(user_profile, "profile", None):
avatar = getattr(user_profile.profile, "avatar", None)
if avatar:
return getattr(avatar, "url", None)
return None
class TopListItemCreateInputSerializer(serializers.ModelSerializer):
class Meta:
model = TopListItem
fields = "__all__"
class TopListItemUpdateInputSerializer(serializers.ModelSerializer):
class Meta:
model = TopListItem
fields = "__all__"
# allow updates, adjust as needed
extra_kwargs = {"top_list": {"read_only": False}}
class TopListItemOutputSerializer(serializers.ModelSerializer):
# Remove the ride field since it doesn't exist on the model
# The model likely uses a generic foreign key or different field name
class Meta:
model = TopListItem
fields = "__all__"
class TopListCreateInputSerializer(serializers.ModelSerializer):
class Meta:
model = TopList
fields = "__all__"
class TopListUpdateInputSerializer(serializers.ModelSerializer):
class Meta:
model = TopList
fields = "__all__"
# user is set by view's perform_create
extra_kwargs = {"user": {"read_only": True}}
class TopListOutputSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
items = TopListItemOutputSerializer(many=True, read_only=True)
class Meta:
model = TopList
fields = "__all__"