动态FileField路径
问题描述:
我试图使用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
答
相当直接:str(instance.album.slug)
答
是,只使用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)
它的工作感谢:D – Kulbir
DrTyrsa还有一件事。为什么它不工作? 'STR(instance.category.name)'。错误信息是''Song'对象没有属性'category'' – Kulbir
@no_access它为什么要工作? :-)我在你的代码中看不到'category'。 – DrTyrsa