在Django管理界面中链接直接从数据库下载模型字段

时间:2012-07-18 23:05:43

标签: django postgresql django-admin

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

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)

from this snippet)。

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

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

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

1 个答案:

答案 0 :(得分:1)

查看ModelAdmin.get_urls(自我)的文档: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