【问题标题】:How to return the absolute path in Django RF如何在 Django RF 中返回绝对路径
【发布时间】:2017-10-26 09:14:40
【问题描述】:

我将文件上传到服务器的特定文件夹,按项目组织。 (忘了说我用的是Docker)

我保存在数据库中:

身份证

4

路径

/var/local/vvv/project-files/project_2/v_5//r_4_C5R1ud0W8AQwnxa.jpg:large.jpeg

文件名

r_4_C5R1ud0W8AQwnxa.jpg:large.jpeg

文件类型

jpeg

如何获取绝对路径?

类似这样的:

http://127.0.0.1:8000/media/r_4_C5R1ud0W8AQwnxa.jpg

我唯一能做的就是:

http://127.0.0.1:8000/api/vv/download_resource/4

但它不能满足我的需要。

请帮忙

我的模特图片在哪里:

class Resource(utils.SafeDeleteModel):
    path      = models.CharField(max_length=200, null=True)  # just to define where to save to
    file_name = models.CharField(max_length=100, null=True)
    file_type = models.CharField(max_length=100, null=True)

    added_on  = models.DateTimeField(auto_now_add=True)
    added_by  = models.ForeignKey(User, null=True, blank=True)
    comment   = models.TextField(null=True, blank=True)

【问题讨论】:

  • 呃。您似乎正在使用CharField 来管理媒体。是否有任何理由手动执行此操作而不是使用FileFieldImageField?使用CharFields,您必须在自己的代码中(重新)实现一些东西(例如路径转换)。你可以切换到例如ImageFields(这将是最直接和最干净的方法)还是有障​​碍阻止您这样做?

标签: django django-rest-framework


【解决方案1】:

您可以使用函数来序列化 Django RF 中的任何字段,例如:

class FooSerializer(serializers.ModelSerializer):

    foo_image = serializers.SerializerMethodField('get_image_url')

    class Meta:
        model = Foo
        fields = ('image',)

    def get_thumbnail_url(self, obj):
        return obj.image.url

这可能最终会返回你想要的。

【讨论】:

  • 只是一个建议:如果 OP 需要一个绝对 URL,他需要这样的东西:``` def get_thumbnail_url(self, obj): url = obj.image.url request = self.context. get("request", None) 如果请求不是 None: url = request.build_absolute_uri(url) return url ``
  • 它没有返回我想要的
  • 似乎您没有存储足够的信息来构建您想要的网址
猜你喜欢
  • 2021-05-23
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 2015-10-16
  • 2020-02-22
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多