如何在django模型中引用其他对象

时间:2011-01-12 10:51:07

标签: django

首先发布在这里。在Django中,我想要将许多文件与特定模型相关联,因此我正在做一个名为文件的单独模型,并且模型'A''有很多'文件。但我希望我的文件保存在由模型'A'命名的导演中。所以例如我想要这样的东西:

class Show(models.Model):
     name = models.CharField()
     showfolder = models.FilePathField()

class Episode(models.Model):
     show = models.ForeignKey(Show)
     name = models.CharField()
     files = models.ManyToManyField(mp3)

class Mp3(models.Model):
     file = FileField(upload_to=Episode.show.showfolder)

所以希望最后一行表达我想要做的事情(从与剧集相关联的Show对象中获取文件夹名称)。问题是我该怎么写呢?(除了跳过控制器中的箍。)

感谢。

1 个答案:

答案 0 :(得分:1)

在您当前的模型中,由于Episode ManyToMany与Mp3的关系,一个文件可能与一个或多个剧集相关联。这意味着您的文件必须同时存在于多个位置。

要拥有层次结构,您需要在Mp3模型中使用ForeignKey to Episode:

class Mp3(Model):
     episode = ForeignKey(Episode)

现在关于你的文件名。根据{{​​3}},upload_to属性可以接受callable,并会向其传递两个参数:instancefilename

def get_file_name(instance, original_filename):
    return os.path.join(MEDIA_ROOT, 'mp3', instance.episode.show.showfolder,     
                        original_filename)

class Mp3(Model):
     file = FileField(upload_to=get_file_name)