Actualización a Django 1.7. Obteniendo error: No se puede serializar: <objeto storages.backends.s3boto.S3BotoStorage

Estoy tratando de actualizar una aplicación django de django 1.6.6 a 1.7 y estoy usando python 2.7.8. Cuando ejecuto python manage.py makemigrations , obtengo el siguiente error:

 ValueError: Cannot serialize:  There are some values Django cannot serialize into migration files. 

Y aquí está el código relevante:

 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)]) 

He leído los documentos de migración y he leído sobre un problema similar aquí , pero no he podido resolverlo. Mi aplicación utiliza django-storages y boto para guardar archivos en Amazon S3. Cualquier ayuda es apreciada.

Solo crea una subclase deconstruible y utilízala en su lugar.

 from django.utils.deconstruct import deconstructible @deconstructible class MyS3BotoStorage(S3BotoStorage): pass 

El problema básico aquí es que está intentando usar Django 1.7 con un paquete ( django-storages ) que no parece haber sido actualizado para funcionar con esa versión todavía.

Aquí hay algunos extractos de la documentación para explicar lo que está sucediendo:

Las migraciones son solo archivos de Python que contienen las antiguas definiciones de sus modelos; por lo tanto, para escribirlas, Django debe tomar el estado actual de sus modelos y serializarlas en un archivo.

Si bien Django puede serializar la mayoría de las cosas, hay algunas cosas que simplemente no podemos serializar en una representación válida de Python; no hay un estándar de Python sobre cómo un valor se puede convertir nuevamente en código.

Puede permitir que Django serialice sus propias instancias de clase personalizadas al darle a la clase un método deconstruct ().

Entonces, la solución aquí es dar a la clase storages.backends.s3boto.S3BotoStorage un método deconstruct() . Eso probablemente será tan fácil como aplicar el decorador de clase @deconstructible .

Es de suponer que el paquete incorporará este cambio en algún momento (¿o quizás la twig maestra ya lo tiene?), Pero también podría parchearlo usted mismo.