2011-01-12 63 views
0

在此处首先发布。在Django中,我希望将许多文件与特定模型关联,因此我正在创建一个名为文件的独立模型,并具有模型“A”有很多'文件。但我希望将我的文件保存在模型'A'命名的导演中。因此,例如,我想是这样的:如何引用django模型中的另一个对象

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) 

所以希望最后一行表达了我想要它做的(得到与事件相关的显示对象的文件夹名称)。问题是我该怎么写呢?(除了在控制器中跳过箍环)。

谢谢。

回答

1

在当前模型中,由于与Mp3的Episode ManyToMany关系,一个文件可能与一个或多个情节相关联。这意味着你的文件将不得不同时存在于多个位置。

有你需要ForeignKey的以情节的MP3模型的层次结构:

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

现在你的文件名。根据django documentationupload_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) 
+0

谢谢Skirmantas!在阅读你的答案后,我点击了你的链接,事实证明,在发布之前,我已经阅读了一切,直到我需要知道的一句话,并以某种方式跳过它!(我通常也不会吝啬)。至于文件位于不止一个地方,我不认为我必须担心,因为路径是基于Show对象而不是剧集,剧集只属于一个节目。或者我错过了什么? – UserZer0 2011-01-12 21:35:06

相关问题