2011-10-22 37 views
1

我有一個形式,我的模板是這樣的:從Django的模板圖像場保存到表中

<form action="." method="GET" style="font-family: Tahoma; font-size: 12px"> 
     <table style="width: 100%;"> 
      <tr> 
       <td> 
        name: 
       </td> 
       <td> 
        <input id="name" name="name" type="text"/> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <label>capacity :</label>&nbsp;</td> 
       <td> 
        <input id="capacity" name="capacity" type="text" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <label>picture:</label> 
       </td> 
       <td>  
        <input type="file" name="imageName_1" id="1"/></a> 
        </div> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        &nbsp; 
       </td> 
       <td> 
        <input id="add" type="button" value="save"/> 
       </td> 
      </tr> 
     </table> 
</form> 

我想獲得2場和圖像,然後把它們保存到以下模式:

class Tour(models.Model): 
    Name=models.CharField(max_length=100) 
    capacity=models.SmallIntegerField() 
    image=models.ImageField(upload_to="gallery") 

如何通過視圖從我的模板中保存此圖像?

回答

2

django解釋如何做到這一點,你有一個具體的問題嗎? https://docs.djangoproject.com/en/dev/topics/http/file-uploads/

首先,您需要在<form>標記內分配enctype="multipart/form-data"

如果您必須手動執行此操作,而不是利用Django表單框架的強大功能,則需要手動將文件/字段數據分配給您的模型。

def myview(request): 
    image = request.FILES['imageName_1'] 
    tour = Tour() 
    tour.Name = request.POST.get('name') 
    tour.capacity = request.POST.get('capacity') 
    tour.image.save(image.name, image) 
    tour.save() 

我建議你檢查出Django的ModelForms作爲視圖/模板組合,這是否和更多的(錯誤檢查/重新顯示)可以在一分鐘內被寫入。

class MyForm(forms.ModelForm): 
    class Meta: 
     model = Tour 

def myview(self):  
    if request.method == 'POST': 
     form = MyForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = MyForm() 
    return render(request, 'my_template.html', {'form': form}) 


<form method='POST' enctype="multipart/form-data"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" /> 
</form>  
+0

我想用戶可以輸入最多5張圖片爲每個巡迴賽,我使用的JavaScript在我的模板,當用戶選擇一個圖片,它會自動添加一個輸入文件,而他最多進入5個圖像,我如何能實現這當我使用ModelForms? –

+1

您的模型僅支持每個遊覽一個圖像。如果您有另一個與Tour相關的模型(多對一),您可以使用另一個強大的表單工具FormSet。 https://docs.djangoproject.com/zh/dev/topics/forms/formsets/#formsets –

+0

對不起,我是Django的新手,我有一個奇怪的問題!我應該在哪裏定義我的modelForms?我把它放在models.py中,但它有錯誤!在文檔中我沒有找到在哪裏定義modelForms –