如何修复向 Django Rest Framework 提交带有图像的表单时出现的“必填字段”错误

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

我创建了一个序列化器来创建描述和照片:

class ImageFileSerializer(serializers.ModelSerializer):
    class Meta:
        model = ImageFile
        fields = ["image"]


class DescriptionFileSerializer(serializers.ModelSerializer):
    image_file = ImageFileSerializer(many=True)
    file_filename = serializers.CharField()
    user_id = serializers.ReadOnlyField(source="user.id")

    class Meta:
        model = DescriptionFile
        fields = ["pk", 'file_filename', 'user_id', 'title', 'description', 'line_video', 'tags',
                  'image_file', "time_create"]
        read_only_fields = ('time_create',)

通过向此视图发送请求:

class DescriptionFileView(ModelViewSet):
    queryset = DescriptionFile.objects.all().annotate(
        file_filename=F("file__filename")
    ).select_related("user", 'file').prefetch_related("tags", "image_file")
    serializer_class = DescriptionFileSerializer
    # permission_classes = [IsAuthorOrStaff]
    filter_backends = [SearchFilter]
    search_fields = ["time_create", "user__id", "tags__name"]
    parser_classes = (MultiPartParser, JSONParser)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

我收到错误:

{
"image_file": [
"Required field."
]
}

我使用这个 html 表单发送请求:

<form action="http://localhost:8000/api/description/file/" method="post" enctype="multipart/form-data">
    <label for="title">Title:</label>
    <input type="text" id="title" name="title"><br><br>
    <label for="description">Description:</label>
    <textarea id="description" name="description"></textarea><br><br>
    <label for="line_video">Line Video:</label>
    <input type="text" id="line_video" name="line_video"><br><br>
    <label for="tags">Tags:</label>
    <input type="number" id="tags" name="tags"><br><br>
    <label for="file">File:</label>
    <input type="text" id="file" name="file_filename"><br><br>
    <label for="image_file">Image:</label>
    <input type="file" id="image_file" name="image_file.image"><br><br>
    <input type="submit" value="Submit">
</form>

如何修复该错误?

python==3.11.9
django==4.2.11
drf==3.15.1

我搜索了一个问题,发现了+-类似的问题,但没有帮助

python django django-rest-framework
1个回答
0
投票

您需要仔细检查 html 表单是否确实发送了

image_file
字段。您可以在浏览器中访问网络页面来完成此操作,您可以在其中查看向后端发送/从后端接收的所有请求/响应。命名可能有问题。

编辑: 看来问题出在线路上

<input type="file" id="image_file" name="image_file.image"><br><br>

应该是这样的

<input type="file" id="image_file" name="image_file"><br><br>
© www.soinside.com 2019 - 2024. All rights reserved.