Django,使用外键';模型中的s值
我想做一个系统,这是照片属于项目。我还允许我直接上传一个项目的zipfile,它将解压并将照片注册到指定的项目中。但是,我在定义Django,使用外键';模型中的s值,django,foreign-keys,Django,Foreign Keys,我想做一个系统,这是照片属于项目。我还允许我直接上传一个项目的zipfile,它将解压并将照片注册到指定的项目中。但是,我在定义Photo类时遇到了问题 我需要使用当前实例获取Project.file\u zip.path的值,以定义img字段的upload\u属性。然而,当我像下面这样尝试时,它返回的是AttributeError:“ForeignKey”对象没有属性“file\u path”。我该如何解决这个问题 class Project(models.Model): .... owner
Photo
类时遇到了问题
我需要使用当前实例获取Project.file\u zip.path的值,以定义img
字段的upload\u
属性。然而,当我像下面这样尝试时,它返回的是AttributeError:“ForeignKey”对象没有属性“file\u 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)
您不能在同一个模型的定义中引用模型中的字段,因为在读取定义时,类尚未定义
解决方案是使用一个可调用的forupload\u to
——如图所示,这可以是一个给定参数instance
和filename
的函数,因此您可以调用instance.filepath()
,以获得正确的路径。我尝试按照您的说明进行操作,但是;要么我定义的函数无效,要么我没有以正确的方式调用它def project\u path(实例,文件名):返回“%s/%s%”(实例.属于.file\u path,文件名)
和img=models.ImageField(upload\u to=project\u path())
返回TypeError:project\u path()正好有两个参数(给定0)
应该是ImageField(upload\u=project\u path)
-不带调用方括号。否则,在定义表单时(没有参数)调用函数,而不是在上载文件时调用函数。是的,我实际上编写了正确的代码,但在其他地方犯了错误,在试图查找错误时,我也改变了这一点。现在效果很好。谢谢