Python 动态文件字段路径
我正在尝试使用Python 动态文件字段路径,python,django,Python,Django,我正在尝试使用get\u file\u path函数生成动态路径。我可以在get\u file\u path中使用Albumslug字段代替这个str(instance.id)?谢谢 这是模型 def get_file_path(instance, filename): return os.path.join('files', str(instance.id), filename) class Album(models.Model): name = models.CharFie
get\u file\u path
函数生成动态路径。我可以在get\u file\u path
中使用Album
slug字段代替这个str(instance.id)
?谢谢
这是模型
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
。它不起作用<代码>实例。slug在歌曲模型中不存在。它只存在于相册模型中(要使用Album
Slug字段)
更新2:这里是model是的,只需使用
instance.slug
而不是instance.id
另一个例子可以在post的答案中找到
更新:如果不是所有实例都有slug字段,那么您可能会对这样的解决方案感兴趣:
def get_file_path(instance, filename):
fld = getattr(instance, 'slug', instance.id)
return os.path.join('files', str(fld), filename)
非常简单:
str(instance.album.slug)
我试过了,但没有成功<代码>实例。slug不存在于<代码>歌曲模型中。它只存在于Album
model中,我想这是因为get\u file\u path
在Album.slug
收到值之前被调用了?!Tyrsa博士还有一件事。为什么它不起作用str(instance.category.name)
。错误消息是'Song'对象没有属性“category”
@没有访问权限,为什么它应该工作?:-)我在你的代码中没有看到类别
。你是对的。此应用程序中没有类别
。但它在不同的应用程序中。但是我在专辑模型中使用了它。像language=models.ForeignKey(Category)
@no\u accessstr(instance.language.name)
'Song'对象没有属性'language'