2012-04-17 7 views
2

나는장고 관리자에 .JPG

그래서 /path/{self.id}.jpg로 저장한다 이미지를 업로드 할 수 있도록 장고에 관리자가 필요합니다 지금까지 나는 ID, 상태, 제목 필드가있는 데이터베이스와 ID, 상태, 제목, THUMB 필드와 모델을 가지고 :

class MEL(models.Model): 
    id = models.AutoField(primary_key=True, editable=False) 
    status = models.IntegerField(choices=((0, 'inactive'), (1, 'active')), default=1) 
    title = models.TextField(verbose_name='Título') 
    thumb = models.ImageField(upload_to=upload_path) 

    class Meta: 
     db_table = u'MEL' 

문제는 이미지가 저장되는 모델에 이전에 업로드되는, 그래서 수 이 순간에 "self.id"에 저장하지 마십시오. 나는/tmp를/{UUID}에 저장할 수 있다고 생각하고 아마 무언가 같이, 후 저장 이름을 변경하십시오 그게 이름을 변경 후 저장하고/tmp를/

에서 삭제 한 후

def upload_path(self, filename): 
    self.file_uuid = uuid.uuid4() 
    return '/tmp/' + self.file_uuid 

아니면 내가. 첫 번째 통화 슈퍼()이 모델의 저장() 메서드를 재정의하려고, 다음의 (a ImageFieldFile 객체에) 이미지 업로드를 처리) (저장하고

제안을 self.id하기 위해 이름을 바꿀 수 ?

감사합니다.

+0

가능한 중복 http://stackoverflow.com/questions/9968532/django-admin-file- : 문제는 당신이 확장을두고 있다고 할 수있다 upload-with-current-model-id) – Ajoy

+0

이것은이 문제에 대한 최상의 [솔루션] (http://stackoverflow.com/a/15776267/1761793)입니다. – Ajoy

답변

-1

upload_to를 사용하여 파일 이름을 변경할 수 있어야합니다. https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField.upload_to

링크의 아래 세 번째 단락이 말한다 : "이것은 또한 호출되는 함수와 같이 호출 할 수 있습니다 내가 프로젝트를 수행하고 장고 문서는 이렇게 말한다 때문에 나는이 말을 업로드 경로를 얻으려면 파일 이름을 포함하는 을 가져옵니다. " [강조 추가]. 나는 냉소적 인 태도로 노력하지 않고 있습니다. 나는 단지 이것이 가능하고 가능해야한다는 것을 보여주는 것일뿐입니다.

다음과 같이 시도해보십시오.

def upload_path(self, filename): 
    basename, extension = os.path.splitext(filename) 
    return '/'.join(["path",("%s%s" % (self.id, extension))]) 
[현재 모델 ID로 장고 관리자 파일 업로드] (의
+1

'self.id'는 모델이 아직 저장되지 않았기 때문에'None'입니다. – Ajoy

관련 문제