动态FileField路径

时间:2011-11-30 07:19:00

标签: python django

我正在尝试使用get_file_path函数来生成动态路径。我可以在Album中使用str(instance.id) slug字段而不是get_file_path吗?感谢

这是模型

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 Slug字段) Update2:这是模型snapshot

2 个答案:

答案 0 :(得分:2)

非常简单:str(instance.album.slug)

答案 1 :(得分:0)

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

您可以在帖子Change filename before save file in Django

的答案中找到另一个例子

更新:如果并非所有实例都有一个slug字段,那么你可能对这样的解决方案感兴趣:

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