如何为一对多(外键)关系创建序列化程序?

问题描述 投票:0回答:1

我必须上传多张图片并保存它们的 URL。可以上传多张图片,但帖子将是一张,其他帖子也类似。我已经创建了模型,但我不知道如何为它创建序列化程序。

我的模特是:

class Posts(models.Model):
    user = models.ForeignKey(User, related_name='user_posts', on_delete=models.CASCADE, null=True, blank=True)
    ###other fields

class PostsMedia(models.Model):
    post = models.ForeignKey(Posts, related_name='post_media', on_delete=models.CASCADE, null=True, blank=True)
    media = models.URLField(max_length = 500, null=True, blank=True)
python django django-models foreign-keys django-serializer
1个回答
1
投票

您可以为您的

PostsMedia
模型创建一个序列化程序,以允许上传多张图片并保存它们的 URL,因此:

class PostsMediaSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostsMedia
        fields = ('id', 'media')


class PostsSerializer(serializers.ModelSerializer):
    post_media = PostsMediaSerializer(many=True, required=False)

    class Meta:
        model = Posts
        fields = ('id', 'user', 'post_media', '__all__')

    def create(self, validated_data):
        post_media_data = validated_data.pop('post_media', [])
        post = super().create(validated_data)

        for one_media_data in post_media_data:
            PostsMedia.objects.create(post=post, **one_media_data)

        return post

create()
方法已用于从验证数据中提取
post_media
数据。

注意: 中的模型不需要添加

s
作为后缀,因为它是默认包含的。所以最好把
Posts
改成
Post

© www.soinside.com 2019 - 2024. All rights reserved.