我创建了一个序列化器来创建描述和照片:
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
我搜索了一个问题,发现了+-类似的问题,但没有帮助
您需要仔细检查 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>