Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有自定义媒体链接的表单ImageField(非媒体根目录)_Python_Django_Django Forms_Django Media - Fatal编程技术网

Python 具有自定义媒体链接的表单ImageField(非媒体根目录)

Python 具有自定义媒体链接的表单ImageField(非媒体根目录),python,django,django-forms,django-media,Python,Django,Django Forms,Django Media,用户应将其护照数据上传至网站。这些数据是私有的,所以如果将其放置在服务器目录之外,效果会更好 以下是一个模型: passport_storage = FileSystemStorage(setting('ROOT_PATH')) class Passport(models.Model): user = models.OneToOneField(User) scan = models.ImageField(verbos

用户应将其护照数据上传至网站。这些数据是私有的,所以如果将其放置在服务器目录之外,效果会更好

以下是一个模型:

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

但是Passport模型中的ModelForm显示了
/media/
中的旧路径。在哪里可以更改表单的ImageField链接?

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

#Γцццв
非常完美:)您可以检查
是否是超级用户,也许?哦,谢谢,我总是忘记所有这些东西都已经在django中提供了:)
@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