website/members/api/v2/serializers/profile.py
from rest_framework import serializers
from members.models import Profile
from thaliawebsite.api.v2.serializers import ThumbnailSerializer
from thaliawebsite.api.v2.serializers.cleaned_model_serializer import (
CleanedModelSerializer,
)
class ProfileSerializer(CleanedModelSerializer):
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop("fields", None)
self.force_show_birthday = kwargs.pop("force_show_birthday", False)
# Instantiate the superclass normally
super().__init__(*args, **kwargs)
if fields:
allowed = set(fields)
existing = set(self.fields.keys())
for field_name in existing - allowed:
self.fields.pop(field_name)
class Meta:
model = Profile
fields = "__all__"
read_only_fields = ["name", "starting_year", "programme", "birthday"]
display_name = serializers.SerializerMethodField("_display_name")
short_display_name = serializers.SerializerMethodField("_short_display_name")
birthday = serializers.SerializerMethodField("_birthday")
photo = ThumbnailSerializer(
size_small="small",
size_medium="medium",
size_large="avatar_large",
placeholder="members/images/default-avatar.jpg",
)
def _short_display_name(self, instance):
return instance.short_display_name()
def _display_name(self, instance):
return instance.display_name()
def _birthday(self, instance):
if instance.show_birthday or self.force_show_birthday:
return instance.birthday
return None