Как создать собственное хранилище для COS в Django
ValueError: Cannot serialize: <desert.storage.TencentStorage object at 0x104fcc580>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/4.0/topics/migrations/#migration-serializing
Я хочу связать FileField в Django с моим COS, чтобы я мог загружать файл с сайта администратора на COS. Вот мой код:
secret_id = settings.COS_SECRET_ID
secret_key = settings.COS_SECRET_KEY
region = settings.REGION
bucket = settings.BUCKET
config = CosConfig(Region=region, Secret_id=secret_id, Secret_key=secret_key)
client = CosS3Client(config)
host = 'https://' + bucket + '.cos.' + region + '.myqcloud.com/'
class TencentStorage(Storage):
def save(self, name, content, max_length=None):
filename = self.generate_filename(name)
client.put_object(
Bucket=bucket,
Key='song/' + filename,
Body=content.read()
)
return filename
def generate_filename(self, filename):
return filename + '_' + sha1(str(time.time()).encode('utf-8')).hexdigest()
def url(self, name):
file_url = client.get_object_url(bucket, 'song/' + name)
return str(file_url)
Но после того, как я заполню это хранилище в модели вот так и использую команду make migration:
song_file = models.FileField(storage=TencentStorage(), null=True)
Вызвало ошибку:
ValueError: Cannot serialize: <desert.storage.TencentStorage object at 0x104fcc580>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/4.0/topics/migrations/#migration-serializing
Как решить эту проблему.