ValueError: Cannot serialize: <myproject.storage.AzureStorage object at 0x7f85185e66d0>

ValueError: Cannot serialize: <myproject.storage.AzureStorage object at 0x7f85185e66d0>

我正在尝试使用 AzureStorage 将 azure 存储与 django 1.7 应用程序连接起来。

models.py

from django.db import models
from myproject.storage import AzureStorage

class MyModel(models.Model):
    my_file = models.FileField(upload_to="files", storage=AzureStorage(container="media"))
    my_image = models.ImageField(upload_to="images", storage=AzureStorage(container="media"))

但是当我尝试进行迁移时,我得到了:

ValueError: Cannot serialize: <myproject.storage.AzureStorage object at 0x7f85185e66d0>
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/dev/topics/migrations/#migration-serializing

究竟是什么不能序列化?

您是否检查过 Upgrading to Django 1.7. Getting error: Cannot serialize: <storages.backends.s3boto.S3BotoStorage object 的解决方案,这与之前提出的类似问题有关。将答案复制到这里供您快速参考:

The basic issue here is that you are trying to use Django 1.7 with a package (django-storages) that doesn't appear to have been updated to work with that version yet.

Here are some excerpts from the documentation to explain what is happening:

Migrations are just Python files containing the old definitions of your models - thus, to write them, Django must take the current state of your models and serialize them out into a file.

While Django can serialize most things, there are some things that we just can’t serialize out into a valid Python representation - there’s no Python standard for how a value can be turned back into code.

You can let Django serialize your own custom class instances by giving the class a deconstruct() method.

So the solution here is to give the class storages.backends.s3boto.S3BotoStorage a deconstruct() method. That will probably be as easy as applying the @deconstructible class decorator.

Presumably the package will incorporate this change at some point (or perhaps the master branch already has it?), but you could also just patch it yourself.

请随时告诉我们解决方案(使用 django.utils.deconstruct 中的 @deconstructible class 装饰器添加 deconstruct() 方法)不适合你。