0

ユーザーは自分のパスポート データをサイトにアップロードする必要があります。このデータは非公開なので、サーバーのディレクトリの外に配置する方がよいでしょう。

ここにモデルがあります:

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

ただし、Passport モデルの ModelForm は、からの古いパスを表示します/media/。フォームの ImageField リンクはどこで変更できますか?

4

1 に答える 1

0

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

于 2012-04-19T05:17:23.350 に答える