Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django,使用外键';模型中的s值_Django_Foreign Keys - Fatal编程技术网

Django,使用外键';模型中的s值

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

我想做一个系统,这是照片属于项目。我还允许我直接上传一个项目的zipfile,它将解压并将照片注册到指定的项目中。但是,我在定义
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)

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


解决方案是使用一个可调用的for
upload\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)
-不带调用方括号。否则,在定义表单时(没有参数)调用函数,而不是在上载文件时调用函数。是的,我实际上编写了正确的代码,但在其他地方犯了错误,在试图查找错误时,我也改变了这一点。现在效果很好。谢谢