mca*_*tle 15 python django boto python-2.7 django-storage
我正在尝试将django应用程序从django 1.6.6升级到1.7并使用python 2.7.8.当我运行时python manage.py makemigrations,我收到以下错误:
ValueError: Cannot serialize: <storages.backends.s3boto.S3BotoStorage object at 0x11116eed0>
There are some values Django cannot serialize into migration files.
Run Code Online (Sandbox Code Playgroud)
以下是相关代码:
protected_storage = storages.backends.s3boto.S3BotoStorage(
acl='private',
querystring_auth=True,
querystring_expire=3600,
)
class Document(models.Model):
...
file = models.FileField(upload_to='media/docs/', max_length=10000, storage=protected_storage)
def __unicode__(self):
return "%s" % self.candidate
def get_absolute_url(self):
return reverse('documents', args=[str(self.pk)])
Run Code Online (Sandbox Code Playgroud)
我已经阅读了迁移文档,并在这里阅读了类似的问题,但我一直无法解决这个问题.我的应用程序使用django-storages和boto将文件保存到Amazon S3上.任何帮助表示赞赏.
Dom*_*TTI 27
只需制作一个可解构的子类,然后使用它.
from django.utils.deconstruct import deconstructible
@deconstructible
class MyS3BotoStorage(S3BotoStorage):
pass
Run Code Online (Sandbox Code Playgroud)
这里的基本问题是你正在尝试将Django 1.7与一个django-storages看似尚未更新的package()一起使用.
以下是文档中的一些摘录,用于解释发生的情况:
迁移只是包含模型的旧定义的Python文件 - 因此,为了编写它们,Django必须采用模型的当前状态并将它们序列化为文件.
虽然Django可以序列化大多数东西,但有些东西我们无法将其序列化为有效的Python表示 - 没有Python标准可以将值转换回代码.
您可以让Django通过为类提供deconstruct()方法来序列化您自己的自定义类实例.
所以这里的解决方案是给类storages.backends.s3boto.S3BotoStorage一个deconstruct()方法.这可能就像应用@deconstructible类装饰器一样简单.
据推测,软件包会在某些时候包含这个变化(或者主分支已经拥有它?),但你也可以自己修补它.