2011-11-30 136 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