如何在Django rest框架中调用自定义序列化程序更新方法?

问题描述

我正在尝试制作一个简单的API,该API可以接收音频文件,对其进行逆转并同时存储它们。 它可以接受文件,并覆盖我颠倒的perform_create()方法。但是现在我找不到用反向文件更新记录的方法。 这是我的观点

class SoundViewSet(viewsets.ModelViewSet):
    queryset = Sound.objects.all().order_by('id')
    serializer_class = SoundSerializer

    def perform_create(self,serializer):
        serializer.save()
        sound = Sound.objects.last()
        root = settings.MEDIA_ROOT.replace('/media','')
        root = root + sound.audio.url
        p = Path(root)
        clip = AudioSegment.from_wav(p)
        rev = clip.reverse()
        sound.reversedaudio = rev
        serializer = SoundSerializer(data=sound)
        serializer.is_valid()
        Sound.objects.filter(id=sound.id).update(reversedaudio=serializer.data.get('reversedaudio'))

它返回NULL值。我必须先将其传递给序列化程序,因为必须为JSON解析音频文件。 我只是似乎找不到一种简单的方法调用序列化程序update(),例如perform_create()。 我尝试了Sound.objects.filter(id=sound.id).update(reversedaudio=sound.reversedaudio),但它的视图集已更新,文件未解析就上传了,基本上是垃圾。 这是我的序列化器类:

class SoundSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Sound
        fields = ('name','audio','reversedaudio')

有人可以指出我所缺少的吗?

P.s。我是第一次使用DRF并在最后期限内工作,所以我宁愿不必自己定义所有内容,而只在可能的情况下围绕模型类进行工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)