Как создать собственное хранилище для 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

Как решить эту проблему.

Вернуться на верх