more fixes, AI
This commit is contained in:
@@ -1,21 +1,48 @@
|
||||
from django.contrib.auth.models import User
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import Event, EventParticipation
|
||||
|
||||
|
||||
class ParticipationSerializer(serializers.ModelSerializer):
|
||||
event = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all())
|
||||
user = serializers.CharField(source="get_username", read_only=True)
|
||||
status = serializers.CharField(required=False)
|
||||
class ParticipationSerializer(serializers.Serializer):
|
||||
"""Serializer for EventParticipation that handles username lookup."""
|
||||
|
||||
class Meta:
|
||||
model = EventParticipation
|
||||
fields = ("event", "user", "status", "comment")
|
||||
event = serializers.PrimaryKeyRelatedField(queryset=Event.objects.all())
|
||||
user = serializers.CharField()
|
||||
status = serializers.CharField(required=False, default="-")
|
||||
comment = serializers.CharField(required=False, allow_blank=True, default="")
|
||||
|
||||
def to_representation(self, instance):
|
||||
"""Serialize an EventParticipation instance."""
|
||||
return {
|
||||
"event": instance.event.pk,
|
||||
"user": instance.user.username,
|
||||
"status": instance.status,
|
||||
"comment": instance.comment,
|
||||
}
|
||||
|
||||
def validate_user(self, value):
|
||||
"""Look up user by username (case-insensitive)."""
|
||||
try:
|
||||
return User.objects.get(username__iexact=value)
|
||||
except User.DoesNotExist:
|
||||
raise serializers.ValidationError(f"User '{value}' does not exist")
|
||||
|
||||
def create(self, validated_data):
|
||||
# Remove the get_username source field as it's read-only
|
||||
validated_data.pop("get_username", None)
|
||||
return super().create(validated_data)
|
||||
"""Create or update EventParticipation based on event and user."""
|
||||
event = validated_data.get("event")
|
||||
user = validated_data.get("user")
|
||||
status = validated_data.get("status", "-")
|
||||
comment = validated_data.get("comment", "")
|
||||
|
||||
# Use update_or_create to handle both new and existing participations
|
||||
participation, created = EventParticipation.objects.update_or_create(
|
||||
event=event,
|
||||
user=user,
|
||||
defaults={"status": status, "comment": comment},
|
||||
)
|
||||
|
||||
return participation
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
instance.status = validated_data.get("status", instance.status)
|
||||
|
||||
Reference in New Issue
Block a user