2

我将二进制文件作为 base64 编码字符串存储在模型的 TextField() 中。我这样做是这样的:

class Foo(models.Model):
  _data = models.TextField(db_column='data', blank=True)

  def set_data(self, data):
    self._data = base64.encodestring(data)

  def get_data(self):
    return base64.decodestring(self._data)

  data = property(get_data, set_data)

来自这个片段)。

如何提供从 Django 管理界面(最好是从模型实例的更改/编辑页面)下载这些文件(解码后)的链接?

我可以对它们进行解码并在页面上显示它们——就像任何其他模型字段一样——但它要么不显示,要么就是垃圾,因为它们是二进制文件。我想提供一个下载链接。

我可以在谷歌上搜索到的关于 Django 文件的大部分信息都假设我正在接受用户上传,或者我想直接从网络服务器提供静态(媒体)文件。也不是这样。我的文件很小,不经常使用,并且仅用于管理用途,因此直接将它们存储在数据库中或让 Django 自己提供它们并没有什么坏处。

4

1 回答 1

1

查看 ModelAdmin.get_urls(self) 的文档:https ://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls

有一个如何将视图添加到 ModelAdmin 对象的示例。您的自定义视图应该返回一个响应,其中内容是您存储的 base64 数据(尽管您可能希望将其从 base64 转换回二进制)。

然后,您可以覆盖该模型的管理模板以包含指向您的自定义视图的链接:https ://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates

于 2012-07-19T03:35:44.160 回答