Django图片上传API返回null问题求助
Django图片上传API返回null问题排查
我在Django中编写了一个图片上传API,但该功能无法正常工作,上传图片时返回null,不清楚原因。现将相关代码及Postman返回结果截图提供如下,恳请帮忙排查问题,谢谢!
Models代码
class Slider(models.Model): image = models.ImageField(upload_to="images/") description = models.TextField()
Views代码
class UploadImage(viewsets.ModelViewSet): queryset = Slider.objects.all() serializer_class = SliderSerializer parser_classes = (MultiPartParser, FormParser) def perform_create(self, request, *args, **kwargs): try: file = request.data["image"] title = request.data['description'] except KeyError: raise ParseError('Request has no resource file attached') Slider.objects.create(image=file, description=title)
Serializers代码
class SliderSerializer(serializers.ModelSerializer): class Meta: model = Slider fields = '__all__'
Urls代码
urlpatterns = [ path('api/upload', views.UploadImage.as_view({'post': 'create'}), name='home') ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Postman返回结果截图

问题排查及解决方案
- 核心错误:perform_create方法缩进错误
你定义的perform_create方法没有缩进在UploadImage类内部,导致ModelViewSet的默认create流程不会执行这个自定义逻辑,而是走默认的序列化保存,最终因流程异常返回null。
修正后的Views代码:
class UploadImage(viewsets.ModelViewSet): queryset = Slider.objects.all() serializer_class = SliderSerializer parser_classes = (MultiPartParser, FormParser) def perform_create(self, serializer): # 推荐使用DRF规范的serializer.save方法,自动处理字段映射 serializer.save() # 若要保留自定义逻辑,需缩进在类内: # try: # file = self.request.data["image"] # description = self.request.data['description'] # except KeyError: # raise ParseError('Request has no resource file attached') # Slider.objects.create(image=file, description=description)
- 其他必要检查项
- 确保settings.py中正确配置媒体文件路径:
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
- 确认已安装Pillow库(Django的ImageField依赖该库):
pip install pillow
- Postman请求需使用
form-data格式,分别添加image(类型选File,上传目标图片)和description(类型选Text,输入描述文本)两个参数。
内容的提问来源于stack exchange,提问作者AbbasLotfinasab
相关产品推荐
相关产品推荐

