django-rest-framework - 返回文件内容而不是文件位置链接
问题描述
模型有这种关系:
class ShoppingList(models.Model):
(...)
config_file = models.FileField(upload_to=upload_config_file)
class FetchedData(models.Model):
(...)
config_id = models.ForeignKey(ShoppingList, on_delete=models.CASCADE, default=0)
def config_link(self):
return self.config_id.config_file
然后,在serializers.py
:
class FetchedDataSerializer(serializers.ModelSerializer):
file_link = serializers.SerializerMethodField()
class Meta:
model = FetchedData
fields = ('config_id', 'file_link')
def get_file_link(self, obj):
return obj.config_link()
问题是,当我得到响应时,文件被表示为它们的内容,所以如果是 JSON 文件,我会得到类似的东西:
{
"config_id": "4544",
"file_link": [
"{\r\n",
" \"glossary\": {\r\n",
" \"title\": \"example glossary\",\r\n",
"\t\t\"GlossDiv\": {\r\n",
" \"title\": \"S\",\r\n",
"\t\t\t\"GlossList\": {\r\n",
" \"GlossEntry\": {\r\n",
" \"ID\": \"SGML\",\r\n",
"\t\t\t\t\t\"SortAs\": \"SGML\",\r\n",
"\t\t\t\t\t\"GlossTerm\": \"Standard Generalized Markup Language\",\r\n",
"\t\t\t\t\t\"Acronym\": \"SGML\",\r\n",
"\t\t\t\t\t\"Abbrev\": \"ISO 8879:1986\",\r\n",
"\t\t\t\t\t\"GlossDef\": {\r\n",
" \"para\": \"A meta-markup language, used to create markup languages such as DocBook.\",\r\n",
"\t\t\t\t\t\t\"GlossSeeAlso\": [\"GML\", \"XML\"]\r\n",
" },\r\n",
"\t\t\t\t\t\"GlossSee\": \"markup\"\r\n",
" }\r\n",
" }\r\n",
" }\r\n",
" }\r\n",
"}"
]
}
怎么做才能只接收文件位置链接?
解决方案
在您的config_link
方法定义中,您将返回相关config
的 's file
,这实际上是文件对象本身。
您应该返回文件 url,它是文件的url
属性:
def config_link(self):
return self.config_id.config_file.url
推荐阅读
- networking - 如何使 TAP 适配器接受来自 PC 的所有流量?
- multithreading - 在多线程环境的集成测试类上方使用 @Transactional 注释的问题
- android - 预装 Android APK - 允许通过 App Signing 进行 Google Play 更新
- javascript - 根据框位置打开弹出模式
- c# - 如何通过设定的步数获得两个数字之间的对数刻度c#
- android - Firebase 用户在 oncreate 中始终初始化为 null
- python - 如何根据分布选择样本?
- esp8266 - 在 SPIFFS 中查找特定日期的详细信息
- python - 在 scipy 中生成一个帕累托分布的随机值
- asp.net-core - 在 Visual Studio 2017 中发布 node_modules