首页 > 解决方案 > django上传音频文件返回null

问题描述

模型.py

from django.db import models
from datetime import datetime

class Song(models.Model):
    title = models.CharField(max_length=64)
    audio_file = models.FileField()
    genre = models.CharField(max_length=64)
    created_at = models.DateTimeField(default=datetime.utcnow)

序列化程序.py

from rest_framework import serializers
from . import models

class SongSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Song
        fields = '__all__'

class CreateSongSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Song
        fields = ['title', 'audio_file', 'genre']

视图.py

from . import models, serializers
from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import parser_classes
from rest_framework.parsers import FileUploadParser

class SongView(APIView):
    
    def get(self, request, format=None):
        serializer = serializers.SongSerializer(models.Song.objects.all(), many=True)
        return Response(serializer.data)

class PostSong(APIView): # here is the class <------------
    serializer_class = serializers.CreateSongSerializer

    def post(self, request, format=None):
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            title = serializer.data.get('title')
            genre = serializer.data.get('genre')
            filename = serializer.data.get('audio_file')
            song = models.Song(title=title, audio_file=filename, genre=genre)
            return Response(serializers.CreateSongSerializer(song).data, status=status.HTTP_200_OK)
        return Response({'Bad Request': 'Invalid Data'}, status=status.HTTP_400_BAD_REQUEST)

网址.py

from django.urls import path
from . import views

urlpatterns = [
    path('songs/', views.SongView.as_view(), name='songs'),
    path('add-song/', views.PostSong.as_view(), name='add-song')
]

回复

{
    "title": "123",
    "audio_file": null,
    "genre": "123"
}

一切正常,因为当我尝试上传文件时它变为空,我尝试实现 parser_class 但它摆脱了表单,所以我实际上无法发布数据,我该如何解决这个问题?

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读