【问题标题】:Form ImageField with custom media link (not MEDIA_ROOT)使用自定义媒体链接(不是 MEDIA_ROOT)形成 ImageField
【发布时间】:2012-04-18 22:11:47
【问题描述】:

用户应将他的护照数据上传到网站。这些数据是私有的,所以最好放在服务器目录之外。

这是一个模型:

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

我写了获取护照的view方法,还是大拇指:

@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 链接?

【问题讨论】:

  • # говнокод 是完美的 :) 你可以检查 is_superuser,也许?
  • 哦,谢谢,我总是忘记所有这些东西已经在 django 中提供了:)

标签: python django django-forms django-media


【解决方案1】:

我会覆盖管理表单的小部件以使用普通上传小部件,而不是更复杂的带有链接和删除复选框的管理上传小部件。如果不可接受,您可以根据管理文件小部件编写自己的小部件,并在此处提供必要的 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2014-09-27
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多