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ファイルについてグーグルで検索できる情報のほとんどは、ユーザーのアップロードを取得していること、またはWebサーバーから静的(メディア)ファイルを直接提供したいことを前提としています。どちらもそうではありません。私のファイルは小さく、使用頻度は低く、管理目的でのみ使用されるため、データベースに直接保存したり、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 に答える