从序列化模型中删除MEDIA_URL前缀

时间:2018-11-06 11:31:57

标签: python django django-rest-framework

我有一个django-restframwork项目,我在 settings.py 文件中设置了 MEDIA_URL 。问题是当序列化模型时,我得到带 media 前缀的文件名。

这是我得到的答复

{
"employees": [
    {
        "id": 1,
        "name": "neki",
        "doc": "/media/simple-nature-wallpapers-free-download-for-desktop-45.jpg"
    }
  ]
}

但是我想要这样的响应,而没有 media 这样的前缀

{
"employees": [
    {
        "id": 1,
        "name": "neki",
        "doc": "simple-nature-wallpapers-free-download-for-desktop-45.jpg"
    }
  ]
}

我有两种解决方法。他们两个都有一些问题

  1. 我可以从 setting.py 文件中删除 MEDIA_URL (问题是我无法从存储设备访问该文件)
  2. 或者我可以将文件名另存为models.CharField()。 (问题是我无法自动从ModelSerializer保存文件)

所以我的问题是如何解决这些问题。

2 个答案:

答案 0 :(得分:0)

覆盖序列化器的 to_represenataion() 方法

class YourSerializer(.....):
    # your code
    def to_representation(self, instance):
        rep = super(YourSerializer,self).to_representation(instance)
        try:
            rep['doc'] = rep['doc'].split('/')[-1]
        except KeyError:
            return rep
        return rep

答案 1 :(得分:0)

如果您喜欢序列化程序和视图,我可以为您提供更好的帮助。但简短的答案是: 如果使用post方法发送此响应,则可以在视图中覆盖create方法(如果使用generics.CreateAPIView)。如果得到,则覆盖检索并...。 然后根据需要更改您的回复。您可以在那里访问您的响应数据。

分享您的视图和序列化器以获得更清晰的答案。