FileFieldでオリジナルのファイル名を保存する

318 views
Skip to first unread message

tsuyuki makoto

unread,
Dec 2, 2006, 12:35:26 PM12/2/06
to django-ja
露木です。

Django勉強会 Disc1で検討したFileFieldのマルチバイト問題に関する
修正をしてみました(添付はrev4150に対するdiffです)。
あまりチェックをしていませんが、なんとなくそれっぽく動きます。
FileFieldの引数にoriginal_filaname_fieldという引数でオリジナルの
ファイル名を格納するフィールドを指定すると、非ASCIIファイル名
対応FileFieldとして動作します。

class TestModel(models.Model):
afile = models.FileField(upload_to='afile',
original_filename_field='orgname')
orgname = models.CharField(blank=True, maxlength=100)
class Admin:
pass

保存するファイル名を無理矢理punycodeにしているので、FileFieldのmaxlength
に関するバリデーションがおかしなことになってしまうはずですが、解決策が
浮かばず・・・。元のFileFieldも同じ問題を抱えているはずなんだけど?

もう少しもんでみますが、明らかにおかしいところを見つけたら突っ込みください。
#この方法だと、ASCII圏で作られたアプリを日本で使うには手直しが必要に
#なるしなぁ。。。
#そもそもpunycodeにしちゃえばもとのファイル名保存フィールドはいらない?

filefield.diff

tsuyuki makoto

unread,
Dec 3, 2006, 7:01:10 AM12/3/06
to django-ja
露木です。

続いてfilefieldのファイルをダウンロードするための汎用ビューを書きました。
Content-dispositionのfilenameをどうしたもんかと悩み中です。
#BASE64にすべき?

ダウンロード汎用ビューは、TestModelに対しては以下のように利用します。
(r'^file/(?P<object_id>.*)/$',
'django.views.generic.simple.file_download',
dict(queryset=TestModel.objects.all(), file_field='afile')),

06/12/03 に tsuyuki makoto<mtsu...@gmail.com> さんは書きました:

filefield_and_dlgv.diff
Reply all
Reply to author
Forward
0 new messages