2009-08-22 59 views
4

我的問題很簡單。我有模板是這樣的:許多文件上傳在ImageField窗體 - django

<form enctype="multipart/form-data" 
action="{% url offers.views.add_offer %}" method="post">  
    <input type="file" name="image1" /> 
    <input type="file" name="image2" />  
    <input type="submit" value="Add" /> 
</form> 

模型看起來像這樣:

class Image(models.Model): 
    image = models.ImageField(upload_to='uploads/images/offers/') 

而且這樣的形式(它使用模型的圖像):

class ImageForm(ModelForm): 
    class Meta: 
     model = Image 

,並查看這樣的:

for f in request.FILES: 
    # imageform: 
     image = ImageForm(request.POST, f) 
     image.save() 

問題是我無法上傳 圖片。我想在圖像模型的兩個獨立實例中保存圖像。
我有一個錯誤:

'unicode' object has no attribute 'get'

感謝任何幫助和響應。

更新了提供更多信息

回答

8

人,Django的表單集是你需要的東西:

http://docs.djangoproject.com/en/dev/topics/forms/formsets/

編輯

的觀點:

def manage_images(request): 
    ImageFormSet = formset_factory(ImageForm) 
    if request.method == 'POST': 
     formset = ImageFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      # do something with the formset.cleaned_data 
    else: 
     formset = ImageFormSet() 
    return render_to_response('manage_images.html', {'formset': formset}) 

模板:

<form enctype="multipart/form-data" action="{% url offers.views.add_offer %}" method="post"> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset.forms %} 
     {{ form }} 
     {% endfor %} 
    </table> 
</form> 
+0

但我該如何使用它?我的問題是從request.FILES獲取數據,我在想。你能給我舉例說明如何使用formset將許多文件保存到許多實例中的同一模型中? – galuszkak 2009-08-23 10:13:48

+1

我編輯了我的答案,告訴你如何 – nabucosound 2009-08-25 10:00:30

1

是什麼使你認爲這工作?您正在遍歷request.FILES並嘗試在每次傳遞文件對象的迭代中實例化一個表單。這一點也不像有什麼文件,它告訴你整個的request.FILES傳中,編輯完成後

評論瞧,你沒有給我們太多的信息去。你的模型有一個或兩個圖像嗎?你爲什麼要分別處理這兩個圖像?你想創建兩個單獨的模型實例,還是一個有兩個圖像?你究竟想要做什麼?

基本上你只是想這樣做:

form = ImageForm(request.POST, request.FILES) 
if form.is_valid(): 
    form.save() 

,就是這樣。

+0

所以我必須做的?你有任何解決方案? – galuszkak 2009-08-22 14:28:11

+0

模型看起來像這樣: class Image(models。型號): image = models.ImageField(upload_to ='uploads/images/offers /') 它只有一個ImageField。我想創建兩個相同模型的獨立實例。我知道如何保存一個文件/圖像。如上所述,這很簡單。這對我來說不是問題。我的問題是,我不知道如何創建這兩個實例(從request.FILES中檢索文件,然後將它保存到兩個分開的新實例)。如果你想了解更多信息,我可以發佈。我想將它保存到同一個模型中。 – galuszkak 2009-08-22 18:34:39

+0

我更新了問題以獲取您要求的信息。 – galuszkak 2009-08-22 21:53:59

2

在這裏您可以找到file upload的文檔。

保存我的圖像形式的save() - 這樣的方法:

def save(self): 
    if self.cleaned_data.get('galleryname'): 
     if self.cleaned_data.get('images1'): 

      path = 'images/'+ urlify(self.cleaned_data.get('galleryname'))+self.cleaned_data.get('images1').name 
      destination = open(s.MEDIA_ROOT+path, 'wb+') 
      for chunk in self.cleaned_data.get('images1').chunks(): 
       destination.write(chunk) 
      p = Photo() 
      p.picture="./"+path 
      p.save() 

,並在視圖中我有

form = CompleteSubscriptionForm(request.POST, request.FILES, error_class=DivErrorList) 
if form.is_valid(): # All validation rules pass 
     form.save()