Django - Сшивание 2 атрибутов в сериализаторе
Ниже приведен сериализатор. Как вы можете видеть, он возвращает отдельные списки, которые соответствуют друг другу: image_url
и image_uuid
connect и video_url
и video_uuid
connect. Я бы хотел, чтобы этот сериализатор возвращал эти атрибуты, собранные вместе, так что он возвращает, например, response.data['image']
как список dict [{image_url: some url, image_uuid: some uuid}]. Как я могу это сделать?
serializer.py
class FullPostDataSerializer(serializers.ModelSerializer):
image_url = serializers.SlugRelatedField(
source='photo_set', many=True, read_only=True, slug_field='image_url'
)
image_uuid = serializers.SlugRelatedField(
source='photo_set', many=True, read_only=True, slug_field='uuid'
)
video_url = serializers.SlugRelatedField(
source='video_set', many=True, read_only=True, slug_field='video_url'
)
video_uuid = serializers.SlugRelatedField(
source='video_set', many=True, read_only=True, slug_field='uuid'
)
goal_uuid = serializers.SlugField()
creator_username = serializers.SlugField()
reply_count = serializers.IntegerField()
cheer_count = serializers.IntegerField()
goal_description = serializers.SlugField()
class Meta:
model = Post
fields = (
'body', 'join_goal', 'created', 'creator_username', 'goal_description', 'reply_count', 'cheer_count',
'image_url', 'uuid', 'type', 'image_uuid', 'creator', 'video_url', 'video_uuid', 'goal_uuid'
)
helper.py
def full_post_data_serializer(post_query_set: QuerySet):
"""
Returns post information in news feed form to include:
creator username, goal description, reply count, cheer count, photos
and video
Parameters:
post_query_set: Current Post model object query set
Returns:
serializer containing all data in query set serialized
for news feed
"""
query_set_annotated = post_query_set.annotate(
creator_username=F('creator__username'),
goal_description=F('join_goal__goal__description'),
goal_uuid=F('join_goal__goal__uuid'),
reply_count=Count('replypost', distinct=True),
cheer_count=Count('cheerpost', distinct=True)
).prefetch_related(
Prefetch('photo_set', Photo.objects.order_by('-created'))
)
return FullPostDataSerializer(query_set_annotated, many=True)
class FullPostDataSerializer(serializers.ModelSerializer):
images = PhotoSerializer(source='photo_set', many=True, read_only=True)
videos = VideoSerializer(source='video_set', many=True, read_only=True)
goal_uuid = serializers.SlugField()
creator_username = serializers.SlugField()
reply_count = serializers.IntegerField()
cheer_count = serializers.IntegerField()
goal_description = serializers.SlugField()
class Meta:
model = Post
fields = (
'body', 'join_goal', 'created', 'creator_username', 'goal_description', 'reply_count', 'cheer_count',
'images', 'uuid', 'type', 'creator', 'videos', 'goal_uuid'
)