Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
如何在方法-Python外部引用类实例_Python_Django_Class - Fatal编程技术网

如何在方法-Python外部引用类实例

如何在方法-Python外部引用类实例,python,django,class,Python,Django,Class,我正在编写Django应用程序,我想为每一次不同的旅行创建不同的目录 此代码不起作用(使用方法): photo=models.ImageField(上传到=“预订/”+获取行程标题()+“/”)#需要修复 TypeError:get_trip_title()缺少1个必需的位置参数:“self” 此代码也不起作用(使用属性): photo=models.ImageField(上传到=“预订/”+str(旅行id.title)+“/”)#需要修复 AttributeError:“ForeignKey

我正在编写Django应用程序,我想为每一次不同的
旅行创建不同的目录

此代码不起作用(使用方法):

photo=models.ImageField(上传到=“预订/”+获取行程标题()+“/”)#需要修复 TypeError:get_trip_title()缺少1个必需的位置参数:“self”

此代码也不起作用(使用属性):

photo=models.ImageField(上传到=“预订/”+str(旅行id.title)+“/”)#需要修复 AttributeError:“ForeignKey”对象没有属性“title”

我知道我可以使用
self.trip\u id.title
,因为我在代码的另一部分中使用了它


有没有办法在类方法之外使用
self
(实例引用?)呢?

在模型之外声明函数,实例将通过第一个参数传递给它:

def get_trip_title(instance, filename):
    # file will be uploaded to MEDIA_ROOT/reservations/title/<filename>
    return 'reservations/{0}/{1}'.format(instance.trip_id.title, filename)

class TripPhoto(models.Model):
    photo = models.FileField(upload_to=get_trip_title)
def get_trip_title(实例,文件名):
#文件将上载到MEDIA_ROOT/reservations/title/
返回'reservations/{0}/{1}'。格式(instance.trip_id.title,文件名)
课堂照片(模型.模型):
照片=模型.FileField(上传到=获取旅行标题)

在模型外部声明函数,实例将与第一个参数一起传递给它:

def get_trip_title(instance, filename):
    # file will be uploaded to MEDIA_ROOT/reservations/title/<filename>
    return 'reservations/{0}/{1}'.format(instance.trip_id.title, filename)

class TripPhoto(models.Model):
    photo = models.FileField(upload_to=get_trip_title)
def get_trip_title(实例,文件名):
#文件将上载到MEDIA_ROOT/reservations/title/
返回'reservations/{0}/{1}'。格式(instance.trip_id.title,文件名)
课堂照片(模型.模型):
照片=模型.FileField(上传到=获取旅行标题)

你的答案不完全是我想要的,但它对我非常有效,所以请投票:)。但我想可能没有办法调用类似于
self
outside-method的东西。你的答案并不完全是我想要的,但它对我非常有效,所以请投票:)。但是我想可能没有办法调用像
self
这样的外部方法。问题是upload\u to参数是在类初始化时传递(并计算)的。当时,根本没有TripPhoto的实例,因此,没有自我,没有旅行id,也没有旅行标题。cosider因不需要而更改设计(或者,不要使用图像字段存储图像)@Mr.Nun。事实上,无碱者的回答很好,是的。显然,Imagefield能够使用一个“callable”来获取实例和文件名,它独立于TripPhoto实例。然而。关于您的问题,仍然无法按您希望的方式引用实例“self”。问题是upload_to参数是在类初始化时传递(并计算)的。当时,根本没有TripPhoto的实例,因此,没有自我,没有旅行id,也没有旅行标题。cosider因不需要而更改设计(或者,不要使用图像字段存储图像)@Mr.Nun。事实上,无碱者的回答很好,是的。显然,Imagefield能够使用一个“callable”来获取实例和文件名,它独立于TripPhoto实例。然而。关于您的问题,仍然无法按照您希望的方式引用实例“self”。
def get_trip_title(instance, filename):
    # file will be uploaded to MEDIA_ROOT/reservations/title/<filename>
    return 'reservations/{0}/{1}'.format(instance.trip_id.title, filename)

class TripPhoto(models.Model):
    photo = models.FileField(upload_to=get_trip_title)