2012-09-12 61 views
18

任何人都可以提供一個完整的示例使用tastypie FileField,請在服務器端和客戶端?Django-tastypie:在POST上的文件上傳的任何例子?

這是我曾嘗試:

#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() 

如果我嘗試使用curl創建一個Foo對象,例如,

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

Foo對象創建成功,但img字段爲空。我可以在調試器中看到,當保存bundle對象時確實有一個包含InMemoryUploadedFile對象的img字段,所以請求可能是好的。 我在哪裏做錯了?代碼片段是最受歡迎的,謝謝!

回答

21

你的資源應該是這樣的:

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

attribute應該對應於場模型。 如文檔中表示:

ApiField.attribute

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

+0

當我這樣做,我得到的錯誤:'格式表示爲「多/表單數據」沒有可用的反序列化method.'我失去了一些東西簡單? –

+1

我找到了一個解決方案來解決這個缺失的反序列化錯誤[這裏](http://stackoverflow.com/questions/12522332/how-to-access-post-data-inside-tastypie-custom-authentication),基於[this github交(https://github.com/toastdriven/django-tastypie/issues/42#issuecomment-5485666)。 –