2011-10-22 42 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 –