movie-night-api/movie_manager/serializers.py

75 lines
2 KiB
Python
Raw Normal View History

from django.utils import timezone
2025-04-08 17:04:32 -05:00
from gunicorn.config import User
2025-04-07 00:30:11 -05:00
from rest_framework import serializers
2025-04-08 17:04:32 -05:00
from movie_manager.models import Movie, MovieList, Schedule, Showing
2025-04-07 00:30:11 -05:00
class MovieSerializer(serializers.ModelSerializer):
2025-05-29 13:58:00 -05:00
has_been_scheduled = serializers.SerializerMethodField()
2025-04-07 00:30:11 -05:00
class Meta:
model = Movie
2025-05-29 13:58:00 -05:00
fields = [
"id",
"title",
"imdb_id",
"year",
"director",
"actors",
"plot",
"genre",
"mpaa_rating",
"critic_scores",
"poster",
"added_by_id",
"has_been_scheduled",
]
def get_has_been_scheduled(self, obj):
return len(Showing.objects.filter(movie_id=obj.id).all()) > 0
2025-04-07 00:30:11 -05:00
class MovieListSerializer(serializers.ModelSerializer):
movie_count = serializers.SerializerMethodField()
2025-04-07 21:05:05 -05:00
movies = MovieSerializer(read_only=True, many=True)
2025-04-07 00:30:11 -05:00
class Meta:
model = MovieList
2025-04-13 01:47:22 -05:00
fields = ["id", "name", "owner", "public", "movies", "movie_count"]
2025-04-07 00:30:11 -05:00
def get_movie_count(self, obj):
return len(obj.movies.all())
2025-04-08 17:04:32 -05:00
2025-04-13 01:47:22 -05:00
2025-04-08 17:04:32 -05:00
class UserSerializer(serializers.Serializer):
class Meta:
model = User
fields = ["id", "username"]
class ShowingSerializer(serializers.ModelSerializer):
movie = MovieSerializer(read_only=True)
class Meta:
model = Showing
fields = ["id", "public", "showtime", "movie", "owner"]
def to_internal_value(self, data):
validated_data = super().to_internal_value(data)
if "showtime" in validated_data and timezone.is_naive(
validated_data["showtime"]
):
validated_data["showtime"] = timezone.make_aware(validated_data["showtime"])
return validated_data
2025-04-08 17:04:32 -05:00
class ScheduleSerializer(serializers.ModelSerializer):
name = serializers.CharField(read_only=True)
2025-04-20 22:29:55 -05:00
showings = ShowingSerializer(source="showing_set", read_only=True, many=True)
2025-04-08 17:04:32 -05:00
class Meta:
model = Schedule
2025-04-13 01:47:22 -05:00
fields = ["name", "owner", "public", "slug", "showings"]