2012-04-18 2 views
0

사용자는 자신의 여권 데이터를 사이트에 업로드해야합니다. 이 데이터는 비공개이므로 서버의 디렉토리 외부에 배치하면 더 좋을 것입니다. 여기 사용자 지정 미디어 링크가있는 ImageField (MEDIA_ROOT 아님)

는 모델 :

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 

내가 여권을 얻기를 위해보기 방법을 쓴, 또는 엄지 손가락 : /media/에서 여권 모델 디스플레이 이전 경로에서

@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. 양식의 ImageField 링크는 어디에서 변경할 수 있습니까?

+0

'# говнокод'는 완벽합니다 :) 대신 is_superuser'를 확인할 수 있습니까? – ilvar

+0

아, 고마워, 난 항상 모든 것들이 이미 장고에 제공 잊지 :) –

답변

0

링크가있는 복잡한 관리자 업로드 위젯 대신 일반 업로드 위젯을 사용하고 확인란을 삭제하려면 관리자 양식의 위젯을 덮어 씁니다. 받아 들일 수없는 경우, 관리자 파일 위젯을 기반으로 자신의 위젯을 작성하고 필요한 URL을 제공 할 수 있습니다.