Django image.save() TypeError: get_valid_name() missing positional argument: 'name'
Django image.save() TypeError: get_valid_name() missing positional argument: 'name'
这是我试过的:
r = requests.get(img_url)
temp = NamedTemporaryFile(delete=True)
temp.write(r.content)
temp.flush()
image = Image()
image.image.save('testimagefilename', File(temp), save=True)
image.save()
在image.image.save()
行,错误轨迹是:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 90, in save
name = self.field.generate_filename(self.instance, name)
File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 332, in generate_filename
return os.path.join(self.get_directory_name(), self.get_filename(filename))
File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 322, in get_filename
return os.path.normpath(self.storage.get_valid_name(os.path.basename(filename)))
TypeError: get_valid_name() missing 1 required positional argument: 'name'
问题是因为 Django 需要本地 OS 路径吗?我正在使用 S3BotoStorage,ImageField 正在使用与项目其余部分不同的存储桶:
image = models.ImageField(storage=S3CustomStorage)
class S3CustomStorage(S3BotoStorage):
def __init__(self, *args, **kwargs):
kwargs['bucket'] = getattr(settings, 'AWS_BUCKET_CUSTOM')
super(S3CustomStorage, self).__init__(*args, **kwargs)
也许会看到 并更改
image = models.ImageField(storage=S3CustomStorage)
到
image = models.ImageField(storage=S3CustomStorage())
我遇到了相同的 TypeError ;-) 但现在它与我的情况下的附加 () 一起使用
这是我试过的:
r = requests.get(img_url)
temp = NamedTemporaryFile(delete=True)
temp.write(r.content)
temp.flush()
image = Image()
image.image.save('testimagefilename', File(temp), save=True)
image.save()
在image.image.save()
行,错误轨迹是:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 90, in save
name = self.field.generate_filename(self.instance, name)
File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 332, in generate_filename
return os.path.join(self.get_directory_name(), self.get_filename(filename))
File "/usr/local/lib64/python3.4/site-packages/django/db/models/fields/files.py", line 322, in get_filename
return os.path.normpath(self.storage.get_valid_name(os.path.basename(filename)))
TypeError: get_valid_name() missing 1 required positional argument: 'name'
问题是因为 Django 需要本地 OS 路径吗?我正在使用 S3BotoStorage,ImageField 正在使用与项目其余部分不同的存储桶:
image = models.ImageField(storage=S3CustomStorage)
class S3CustomStorage(S3BotoStorage):
def __init__(self, *args, **kwargs):
kwargs['bucket'] = getattr(settings, 'AWS_BUCKET_CUSTOM')
super(S3CustomStorage, self).__init__(*args, **kwargs)
也许会看到
image = models.ImageField(storage=S3CustomStorage)
到
image = models.ImageField(storage=S3CustomStorage())
我遇到了相同的 TypeError ;-) 但现在它与我的情况下的附加 () 一起使用