【问题标题】:ValueError: Cannot serialize: <myproject.storage.AzureStorage object at 0x7f85185e66d0> [duplicate]ValueError:无法序列化:<myproject.storage.AzureStorage object at 0x7f85185e66d0>
【发布时间】:2015-09-14 14:49:41
【问题描述】:

我正在尝试使用 AzureStorage 将 azure storage 与 django 1.7 app 连接起来。

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

究竟是什么不能序列化?

【问题讨论】:

  • 也许是 modified_time ...尝试调试它...它只有 64 行代码,2 年内没人更新:D
  • 将@deconstructible 添加到 AzureStorage 类可修复此错误

标签: python django azure azure-storage azure-blob-storage


【解决方案1】:

您是否检查过 Upgrading to Django 1.7. Getting error: Cannot serialize: <storages.backends.s3boto.S3BotoStorage object 的解决方案,这是一个类似的问题。在这里复制答案供您快速参考:

这里的基本问题是您正在尝试将 Django 1.7 与 似乎没有更新到的包(django-storages) 还可以使用那个版本。

这里是文档的一些摘录来解释什么是 发生:

迁移只是包含旧定义的 Python 文件 您的模型 - 因此,要编写它们,Django 必须采用当前状态 您的模型并将它们序列化到一个文件中。

虽然 Django 可以序列化大多数东西,但有些东西我们需要 只是无法序列化为有效的 Python 表示形式 - 有 没有关于如何将值转换回代码的 Python 标准。

您可以让 Django 序列化您自己的自定义类实例,方法是: 该类有一个 deconstruct() 方法。

所以这里的解决方案是给类 storages.backends.s3boto.S3BotoStorage 一个 deconstruct() 方法。那 可能会像应用 @deconstructible 类一样简单 装饰器。

大概包会在某个时间点包含此更改(或 也许主分支已经有了它?),但你也可以只是 自己修补。

如果解决方案(使用 django.utils.deconstruct 中的 @deconstructible 类装饰器添加 deconstruct() 方法)对您不起作用,请随时告诉我们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 2015-09-19
    • 2015-09-21
    • 2023-04-07
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多