【问题标题】:Django, use of ForeignKey's value within modelDjango,在模型中使用 ForeignKey 的值
【发布时间】:2011-08-09 09:01:11
【问题描述】:

我想做一个系统,就是照片属于项目。我还启用了我可以直接为项目上传 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)

【问题讨论】:

    标签: django foreign-keys


    【解决方案1】:

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

    解决方案是使用 upload_to 的可调用函数 - 如图所示 in the documentation,这可以是一个函数,其参数为 instance 和 filename,因此您可以调用 instance.filepath() 来获得正确的路径。

    【讨论】:

    • 我正在尝试按照您的指示进行操作,但是;要么我定义了无效的函数,要么我没有以正确的方式调用它。 def project_path(instance, filename): return '%s/%s'%(instance.belongs_to.file_path,filename) 和 img=models.ImageField(upload_to=project_path()) 返回 TypeError: project_path() takes exactly 2 arguments (0 given)
    • 应该是ImageField(upload_to=project_path) - 没有调用方括号。否则,在定义表单时调用该函数,不带参数,而不是在上传文件时调用。
    • 是的,我实际上编写了正确的代码,但在其他地方犯了错误,在尝试查找错误时,我也进行了更改。现在效果很好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 2019-04-30
    • 2018-12-15
    • 2016-04-12
    • 2014-07-30
    • 1970-01-01
    • 2012-10-16
    • 2017-08-25
    相关资源
    最近更新 更多