class CitySerializer(serializers.ModelSerializer): photo = StdImageSerializer(read_only=True) photo_square = StdImageSerializer(read_only=True) photo_high = StdImageSerializer(read_only=True) class Meta: model = City fields = ( 'id', 'photo', 'photo_square', 'photo_high', 'name', )
class EventListSerializer(ExcludableModelSerializer): image = StdImageSerializer(read_only=True) event_category = EventCategorySerializer(read_only=True) centres = CentreCitySerializer(read_only=True, many=True) project = ProjectListSerializer(read_only=True) class Meta: model = Event fields = ( 'id', 'event_category', 'centres', 'project', 'created_at', 'image', 'title', 'content', 'is_active', 'slug', ) @staticmethod def set_eager_loading(queryset): queryset = queryset.select_related('event_category', 'project') queryset = queryset.prefetch_related( Prefetch('centres', queryset=Centre.objects.select_related('city'))) return queryset
class TwitterCardSerializer(serializers.ModelSerializer): image = StdImageSerializer(read_only=True, variation='twitter_card') class Meta: model = TwitterCard fields = ( 'card', 'title', 'description', 'image', )
class PartnerSerializer(serializers.ModelSerializer): logo = StdImageSerializer(read_only=True) class Meta: model = Partner fields = ( 'id', 'logo', 'name', 'link', )
class MetadataListSerializer(serializers.ModelSerializer): image = StdImageSerializer(read_only=True) class Meta: model = Metadata fields = ( 'url_name', 'title', 'description', 'robots', 'image', )
class OpenGraphSerializer(serializers.ModelSerializer): image = StdImageSerializer(read_only=True, variation='open_graph') class Meta: model = OpenGraph fields = ( 'type', 'url', 'title', 'description', 'image', )
class ProjectDetailSerializer(AdjacentObjectsSerializerMixin, ExcludableModelSerializer): image = StdImageSerializer(read_only=True) project_area = ProjectAreaSerializer(read_only=True) project_attached_documents = ProjectAttachedDocumentSerializer( read_only=True, many=True) centres = CentreCitySerializer(read_only=True, many=True) events = EventListSerializer(exclude_fields=['centres', 'project'], read_only=True, many=True) class Meta: model = Project fields = ( 'id', 'project_area', 'project_attached_documents', 'centres', 'events', 'started_at', 'modified_at', 'image', 'title', 'content', 'is_active', 'slug', 'prev_object', 'next_object', ) @staticmethod def set_eager_loading(queryset): queryset = queryset.select_related('project_area') queryset = queryset.prefetch_related( 'project_attached_documents', Prefetch('events', queryset=Event.objects.select_related('event_category')), Prefetch('centres', queryset=Centre.objects.select_related('city'))) return queryset
class ParticipantSerializer(ExcludableModelSerializer): photo = StdImageSerializer(read_only=True) centre = CentreCitySerializer(read_only=True) class Meta: model = Participant fields = ( 'id', 'photo', 'name', 'surname', 'position', 'centre', ) @staticmethod def set_eager_loading(queryset): queryset = queryset.select_related('centre', 'centre__city') return queryset