class StoryImageSerializer(serializers.ModelSerializer): """ModelSerializer for StoryImage""" filename = serializers.CharField(read_only=True, source='imagefile.filename') thumb = AbsoluteURLField(source='imagefile.large.url') cropped = AbsoluteURLField(read_only=True) aspect_ratio = serializers.DecimalField(required=False, max_digits=5, decimal_places=4) crop_box = CropBoxField(read_only=True, source='imagefile.crop_box') class Meta: model = StoryImage fields = [ 'url', 'id', 'caption', 'parent_story', 'imagefile', 'creditline', 'thumb', 'cropped', 'filename', 'ordering', 'placement', 'size', 'aspect_ratio', 'crop_box', ]
class StorySerializer(serializers.HyperlinkedModelSerializer): """ModelSerializer for Story""" url_field_name = 'uri' class Meta: model = Story fields = [ 'id', 'uri', 'public_url', 'edit_url', 'modified', 'created', 'working_title', 'publication_status', 'kicker', 'title', 'lede', 'theme_word', 'bodytext_markup', 'publication_date', 'story_type', 'story_type_name', 'image_count', ] story_type_name = serializers.StringRelatedField(source='story_type') public_url = AbsoluteURLField(source='get_absolute_url') edit_url = AbsoluteURLField(source='get_edit_url') bodytext_markup = serializers.CharField(trim_whitespace=False) working_title = serializers.CharField( trim_whitespace=False, max_length=1000 ) story_type = serializers.PrimaryKeyRelatedField( queryset=StoryType.objects.all(), read_only=False ) image_count = serializers.IntegerField(read_only=True) # url = serializers.HyperlinkedIdentityField() def validate_working_title(self, value): if 'Trump' in value: raise exceptions.ValidationError('🙍') return value def update(self, instance, validated_data): clean_model = ( validated_data.pop('clean', False) or 'publication_status' in validated_data ) story = super().update(instance, validated_data) if clean_model: story.full_clean() story.save() return story
class ImageFileSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = ImageFile fields = [ 'id', 'url', 'filename', 'filesize', 'artist', 'description', 'category', 'contributor', 'small', 'large', # 'thumb', 'original', 'width', 'height', 'mimetype', 'cropping_method', 'method', 'created', 'modified', 'crop_box', 'usage', ] read_only_fields = [ 'original', 'artist', ] contributor = serializers.PrimaryKeyRelatedField( queryset=Contributor.objects.all(), allow_null=True, ) width = serializers.IntegerField(source='full_width') height = serializers.IntegerField(source='full_height') usage = serializers.IntegerField(read_only=True) crop_box = CropBoxField() original = AbsoluteURLField() small = AbsoluteURLField() large = AbsoluteURLField() # thumb = AbsoluteURLField() mimetype = serializers.SerializerMethodField() method = serializers.SerializerMethodField() def get_method(self, instance): return instance.get_cropping_method_display() def get_mimetype(self, instance): return instance.stat.mimetype
class ContributorSerializer(serializers.HyperlinkedModelSerializer): """ModelSerializer for Contributor""" class Meta: model = Contributor fields = [ 'id', 'url', 'status', 'display_name', 'phone', 'email', 'byline_photo', 'thumb', 'stint_set', 'position', 'first_position', 'title', 'username', ] extra_kwargs = { 'display_name': {'min_length': 3, 'max_length': 50}, 'status': {'required': True}, 'email': {'required': False}, } username = serializers.CharField(source='user', read_only=True) byline_photo = serializers.PrimaryKeyRelatedField( many=False, queryset=ImageFile.objects.profile_images(), allow_null=True, required=False, ) stint_set = StintSerializer(many=True, read_only=True) phone = PhoneNumberField(required=False) thumb = AbsoluteURLField() first_position = serializers.IntegerField( allow_null=True, write_only=True, required=False ) def validate_status(self, value): if not value: raise serializers.ValidationError('invalid choice') return value def create(self, validated_data): position = validated_data.pop('first_position', None) contributor = Contributor.objects.create(**validated_data) if position: Stint.objects.create( contributor=contributor, position_id=int(position), ) if contributor.email and contributor.status == Contributor.ACTIVE: user = tasks.connect_contributor_to_user(contributor, True) assert user.is_active, 'should be active' return contributor
class NestedPDFSerializer(serializers.ModelSerializer): cover = AbsoluteURLField(source='get_cover_page') class Meta: model = PrintIssue fields = [ 'url', 'pages', 'cover', 'pdf', ]
class PrintIssueSerializer(serializers.HyperlinkedModelSerializer): """ModelSerializer for PrintIssue""" cover = AbsoluteURLField(source='get_cover_page.url') class Meta: model = PrintIssue fields = [ 'url', 'issue', 'pages', 'cover', 'pdf', ]
class BylineSerializer(serializers.ModelSerializer): class Meta: model = Byline fields = [ 'id', 'ordering', 'credit', 'name', 'title', 'contributor', 'thumb', ] name = serializers.StringRelatedField(source='contributor') thumb = AbsoluteURLField(source='contributor.thumb')