Coverage for website/events/api/v2/serializers/event_registration.py: 60.00%
28 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from rest_framework import serializers
3from events.models import EventRegistration
4from members.api.v2.serializers.member import MemberSerializer
5from payments.api.v2.serializers import PaymentSerializer
6from thaliawebsite.api.v2.serializers.cleaned_model_serializer import (
7 CleanedModelSerializer,
8)
11class EventRegistrationSerializer(CleanedModelSerializer):
12 """Serializer for event registrations."""
14 def __init__(self, *args, **kwargs):
15 # Don't pass the 'fields' arg up to the superclass
16 fields = kwargs.pop("fields", {"pk", "member", "name"})
18 # Instantiate the superclass normally
19 super().__init__(*args, **kwargs)
21 allowed = set(fields)
22 existing = set(self.fields.keys())
23 for field_name in existing - allowed:
24 self.fields.pop(field_name)
26 class Meta:
27 model = EventRegistration
28 fields = (
29 "pk",
30 "present",
31 "queue_position",
32 "date",
33 "payment",
34 "member",
35 "name",
36 "is_cancelled",
37 "is_late_cancellation",
38 )
40 payment = PaymentSerializer()
41 member = MemberSerializer(detailed=False, read_only=True)
42 is_cancelled = serializers.SerializerMethodField("_is_cancelled")
43 is_late_cancellation = serializers.SerializerMethodField("_is_late_cancellation")
44 queue_position = serializers.SerializerMethodField("_queue_position")
46 def _is_late_cancellation(self, instance):
47 return instance.is_late_cancellation()
49 def _queue_position(self, instance):
50 pos = instance.queue_position
51 return pos if pos and pos > 0 else None
53 def _is_cancelled(self, instance):
54 return instance.date_cancelled is not None