[Python] BrowsableAPIRenderer doens't have a file upload field

Discussão em 'Python' iniciado por Stack, Fevereiro 20, 2025.

  1. Stack

    Stack Membro Participativo

    I'm trying to have an image upload field, so I could upload multiple images per post. But it seems like it doesn't have a file upload field, let alone that would allow and save multiple files.

    views.py

    class PostsViewSet(ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = [IsAuthenticated, IsOwnerOrReadOnly|IsAdminUser]
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = PostFilter
    parser_classes = [JSONParser, MultiPartParser, FileUploadParser]
    renderer_classes = [JSONRenderer, BrowsableAPIRenderer]


    serializers.py

    class PostImageSerializer(serializers.ModelSerializer):
    class Meta:
    model = PostImage
    fields = ('image',)


    class PostSerializer(serializers.ModelSerializer):
    author = UserSerializer(read_only=True)
    comments = CommentSerializer(many=True, read_only=True, source='comment_set')
    likes_count = serializers.SerializerMethodField()
    images = PostImageSerializer(source='postimage_set', many=True, read_only=True)

    class Meta:
    model = Post
    fields = "__all__"

    def create(self, validated_data):
    validated_data["author"] = self.context["request"].user
    images_data = self.context.get('view').request.FILES
    print(validated_data)
    post = Post.objects.create(text=validated_data.get('text'), author=validated_data.get('author'))

    for image_data in images_data.values():
    PostImage.objects.create(post=post, image=image_data)
    return post


    models.py

    class Post(models.Model):
    id = models.AutoField(primary_key=True)
    text = models.TextField(max_length=165)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
    return f'{self.author} posts "{self.text}"'


    class PostImage(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='images/', blank=True)


    and it looks like this

    [​IMG]

    Where's error?

    Continue reading...

Compartilhe esta Página