2011-11-30 141 views
0

我試圖使用get_file_path函數來生成動態路徑。我可以在get_file_path中使用Album slug字段而不是str(instance.id)嗎?感謝動態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。它只是在相冊樣板存在(想使用Album彈頭場) UPDATE2:這裏是模型snapshot

回答

3

相當直接:str(instance.album.slug)

+0

它的工作感謝:D – Kulbir

+0

DrTyrsa還有一件事。爲什麼它不工作? 'STR(instance.category.name)'。錯誤信息是''Song'對象沒有屬性'category'' – Kulbir

+0

@no_access它爲什麼要工作? :-)我在你的代碼中看不到'category'。 – DrTyrsa

0

是,只使用instance.slug代替instance.id

另一個例子,你可以在後期的答案找到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

我試過,但沒有運氣。 'Song'模型中不存在'instance.slug'。它只存在於'相冊'模型 – Kulbir

+0

好吧,看我的更新。這是你在找什麼? – gecco

+0

無法正常工作。 '無'文件夾創建。 – Kulbir