2013-06-05 75 views
2

我想發一個批量發佈。 問題是每個項目都需要一個圖像(或者甚至可能有幾個)。 可以通過批量請求來做到這一點嗎?TastyPie:是否可以在批量申請中發佈多個文件

型號:

class CollageItem(models.Model): 
    url = models.URLField(null = True) 
    image = models.FileField(upload_to = 'i') 
    thumbnail = models.FileField(upload_to = 't') 

而且TastyPie對象:

class CollageItemResource(ModelResource): 
    image = fields.FileField(attribute = 'image', null = True, blank = true) 
    thumbnail = fields.FileField(attribute = 'thumbnail', null = True, blank = true) 
    class Meta: 
    queryset = CollageItem.objects.all(
    resource_name = "collage_item" 

可使用批量請求我張貼多張圖片,或者我應該恢復到單個帖子?

+0

您是否參加了修補程序路線,或者嘗試了上述方法並創建單獨的文件字段? –

回答

0

我自定義序列化的道路去:

class FormPostSerializer(Serializer): 
    formats = ['form'] 
    content_types = { 
     'form': 'multipart/form-data', 
    } 

    def from_form(self, content): 
     try: 
      dict = cgi.parse_multipart(StringIO(content), self.form_boundary) 
     except Exception, e: 
      raise e 
     for key, value in dict.iteritems(): 
      dict[key] = value[0] if len(value) > 0 else None 
     return dict 

和基類所有需要發佈多個文件的資源:

class FormResource(ModelResource): 
    class Meta: 
     serializer = FormPostSerializer() 

    def dispatch(self, request_type, request, **kwargs): 
     cth = request.META.get('CONTENT_TYPE') or \ 
      request.META.get('Content-type') or \ 
      self._meta.serializer.content_types['json'] 
     self.Meta.serializer.form_boundary = self.parse_content_type_header(cth) 
     return super(FormResource, self).dispatch(request_type, request, **kwargs) 

    def parse_content_type_header(self, content_type_header): 
     parts = cgi.parse_header(content_type_header) 
     rv = {} 
     for p in parts: 
      if isinstance(p, dict): 
       rv = dict(rv.items() + p.items()) 
     return rv 

當然,seriali zer需要一些額外的處理(例如UTF8字段),我從答案中省略了這些處理。

0

Ofcourse you can!根據圖像大小,您必須決定是否需要太長時間才能上傳它們,但這是可能的。 根據tastypie文檔,可以通過修補程序選項批量創建和更新。

文檔here

,並詳細here

相關問題