Django,在模型中使用ForeignKey的值

时间:2011-08-09 09:01:11

标签: django foreign-keys

我想制作一个系统,这是属于项目的照片。我还启用了我可以直接为项目上传zip文件,它将解压缩并将照片注册到指定的项目。但是,在定义Photo类时我遇到了麻烦。

我需要使用当前实例获取Project.file_zip.path的值,以定义img字段的upload_to属性。但是,当我尝试下面的操作时,它会返回AttributeError: 'ForeignKey' object has no attribute 'file_path'。我该如何解决这个问题?

class Project(models.Model):
....
owner=models.ForeignKey(User)
file_zip=models.FileField(upload_to='projects/%Y/%m/%d')

def __unicode__(self):
    return self.project_name

def file_path(self):
    return re.search(re.search('[^\s]+(?=\.zip)', self.file_zip).group(0))

class Photo(models.Model):
    belongs_to=models.ForeignKey(Project)
    img=models.ImageField(upload_to='/home/contact/python_project/all_bugs_will_reveal/'+belongs_to.file_path())
    desc=models.CharField(max_length=255)

1 个答案:

答案 0 :(得分:2)

您不能在同一模型的定义中引用模型中的字段,因为在读取定义时尚未定义类。

解决方案是使用upload_to的callable - 如图in the documentation所示,这可以是一个给出参数instancefilename的函数,所以你可以致电instance.filepath()以获得正确的路径。