2010-07-06 68 views
3

我期待從ImageField覆蓋_get_url方法的最佳方式,我需要自定義url,因爲我不想默認返回的url(我將這個圖像分發給一個視圖管理ACL,以便基於MEDIA_ROOT的URL不正確)。從ImageField覆蓋_get_url()

我是否需要創建自己的ImageField?或者是否有解決方案使用較少的代碼?

預先感謝 法比安斯基

回答

4

感謝lazerscience,在這裏我的最終解決方案:

from django.core.files.storage import FileSystemStorage 
from django.db.models import get_model 
from django.core.urlresolvers import reverse 
from django.db import models 
from django.conf import settings 


class PhotographerStorage(FileSystemStorage): 
    def __init__(self, location=None): 
     super(PhotographerStorage, self).__init__(location) 

    def url(self, name): 
     photo_model = get_model('photographer', 'photo') 
     photo = photo_model.objects.get(original_image=name) 
     url = super(PhotographerStorage, self).url(name) 
     return '%s?size=%d' % (reverse('photographer_photo_display', 
      args=[photo.slug]), 300) 


fs = PhotographerStorage(location=settings.PHOTOGRAPHER_LOCATION) 

class Photo(models.Model): 
    ... 
    original_image = models.ImageField(storage=fs) 
    ... 

它的工作原理就像一個魅力:)