2012-09-12 15 views
18

¿Alguien podría dar un ejemplo completo sobre el uso del sabroso FileField, tanto del lado del servidor como del lado del cliente, por favor?Django-tastypie: ¿Algún ejemplo de carga de archivos en POST?

Esto es lo que he intentado:

#models.py 
class Foo(models.Model): 
    img = models.ImageField(upload_to="images", null=True, blank=True) 
    body = models.CharField() 

#api.py 
class FooResource(ModelResource): 
    img = fields.FileField(attribute="image", null=True, blank=True) 
    class Meta: 
     queryset = Foo.objects.all() 

Si trato de crear un objeto foo utilizando rizo, por ejemplo,

>>> curl -F "body=test" -F "[email protected]_img.png" http://localhost:8000/api/0.1/foo/ 

Un objeto foo se crea correctamente, pero el campo img es nulo . Puedo ver en el depurador que al guardar el objeto bundle de hecho tiene un campo img que contiene un objeto InMemoryUploadedFile, por lo que la solicitud probablemente sea correcta. ¿Dónde estoy equivocado? Los fragmentos de código son bienvenidos, ¡gracias!

Respuesta

21

Sus recursos deben tener este aspecto:

class FooResource(ModelResource): 
    img = fields.FileField(attribute="img", null=True, blank=True) 
    class Meta: 
     queryset = Foo.objects.all() 

El attribute debe corresponder al campo en el modelo. Como se indica en la documentación:

ApiField.attribute

A string naming an instance attribute of the object wrapped by the Resource.

+0

Cuando hago esto, me sale el error: 'El formato indicado '/ form-data de varias partes' no tenía deserialización disponibles procedimiento de análisis que me estoy perdiendo algo simple? –

+1

Encontré una solución al error de deserialización faltante [aquí] (http://stackoverflow.com/questions/12522332/how-to-access-post-data-inside-tastypie-custom-authentication), basado en [este github publicación] (https://github.com/toastdriven/django-tastypie/issues/42#issuecomment-5485666). –

Cuestiones relacionadas