2012-04-18 4 views
0

ユーザーはパスポートデータをサイトにアップロードする必要があります。このデータはプライベートなので、サーバのディレクトリの外に置かれた方が良いでしょう。ここでカスタムメディアリンク(MEDIA_ROOTではなく)を使用したImageField

はモデルです:

passport_storage = FileSystemStorage(setting('ROOT_PATH')) 

class Passport(models.Model): 
    user    = models.OneToOneField(User) 

    scan    = models.ImageField(verbose_name=u'Scan or photo', storage=passport_storage, upload_to='passport', blank=True) 

    def preview_scan(self): 
     return '<a href="%s"> <img src="%s%s/?thumb=1"></img> </a>' % (self.id, PASSPORT_URL, self.id) 
    preview_scan.allow_tags = True 

私はパスポートを取得するためのビューの方法を書いたか、それは親指です:パスポートモデルから

@login_required 
def get_passport(request, **kwargs): 
    id = kwargs.pop('id', None) 
    user = request.user 

    passport = Passport.objects.filter(pk=id) 
    if user.username != 'admin': # говнокод 
     passport = passport.filter(user=user) 
    passport = passport[0] 
    scan = passport.scan 
    path = scan.path 
    sz = scan.size 

    if request.GET.get('thumb', None): 
     path = get_thumb(path) 
     sz = os.path.getsize(path) 

    filename = os.path.basename(path) 
    mt = mimetypes.guess_type(filename)[0] 

    wrapper = FileWrapper(file(path)) 
    response = HttpResponse(wrapper, mimetype=mt) 
    response['Content-Disposition'] = 'attachment; filename=%s' % filename 
    response['Content-Length'] = sz 

    return response 

しかしのModelFormが/media/から古いパスが表示されます。フォームのImageFieldリンクはどこで変更できますか?

+0

'#говнокод'は完璧です:)代わりに' is_superuser'を確認できますか? – ilvar

+0

ああ、ありがとう、私はいつもこのすべてのものが既にdjangoで提供されていることを忘れている:) –

答えて

0

adminフォームのウィジェットを上書きして、より複雑なadminアップロードウィジェットの代わりにプレーンアップロードウィジェットを使用し、リンクと削除チェックボックスを使用します。受け入れられない場合は、管理ファイルウィジェットに基づいて独自のウィジェットを作成し、そこに必要なURLを指定することができます。

関連する問題