2011-11-30 7 views
0

get_file_path 함수를 사용하여 동적 경로를 생성하려고합니다. 이 str(instance.id) 대신 Album 슬러그 필드를 get_file_path에 사용할 수 있습니까? 감사동적 FileField 경로

다음

모델

def get_file_path(instance, filename): 
    return os.path.join('files', str(instance.id), filename) 

class Album(models.Model): 
    name = models.CharField(max_length=100) 
    slug = models.SlugField(unique = True,max_length=100,help_text="Suggested value automatically generated from name. Must be unique.") 
    path = models.CharField(max_length=100,null=True, blank=True) 
    language = models.ForeignKey(Category) 
    albumid = models.CharField(max_length=100) 

class Song(models.Model): 
    title = models.CharField(max_length=100) 
    artist = models.ManyToManyField(Artist) 
    music = models.ForeignKey(Music) 
    album = models.ForeignKey(Album) 
    file = models.FileField(upload_to=get_file_path) 

업데이트입니다 : 나는 instance.slug을 시도했다. 작동하지 않습니다. instance.slug은 노래 모델에 없습니다. 그것은 앨범의 모델에 존재 갱신 2가 (Album 슬러그 필드를 사용하려면) : 여기 snapshot

답변

3

명백한 : str(instance.album.slug)

+0

보기 감사합니다 : D – Kulbir

+0

DrTyrsa 한 가지 더. 왜 작동하지 않는거야? 'str (instance.category.name)'. '노래'객체에 'category'라는 속성이 없습니다라는 오류 메시지가 표시됩니다. – Kulbir

+0

@no_access 왜 작동해야합니까? :-) 당신의 코드에'category'가 없습니다. – DrTyrsa

0

예, 당신이 게시물의 질문에 대해 답 찾을 수 있습니다 대신 instance.id

다른 예 instance.slug를 사용하는 모델입니다 Change filename before save file in Django

업데이트 :

def get_file_path(instance, filename): 
    fld = getattr(instance, 'slug', instance.id) 
    return os.path.join('files', str(fld), filename) 
: 모든 인스턴스는이 같은 솔루션에 관심이있을 수있는 것보다 슬러그 필드가있는 경우
+0

나는 그것을 시험해 보았지만 행운이 없었다. 'instance.slug'는'Song' 모델에 존재하지 않습니다. 그것은 단지'앨범'모델 – Kulbir

+0

에 존재합니다. 내 업데이트를보십시오. 이게 니가 찾고있는거야? – gecco

+0

이 작동하지 않습니다. '없음'폴더가 생성되었습니다. – Kulbir