我的问题很简单。我有这样的模板:
<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'对象没有属性'get'
感谢您提供任何帮助和回复。
已更新以提供更多信息
答案 0 :(得分:8)
Man,Django Formsets就是您所需要的:
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>
答案 1 :(得分: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()
答案 2 :(得分:1)
是什么让你认为这会起作用?您正在遍历request.FILES
并尝试在每次传递文件对象的迭代时实例化一个表单。这与文档中的内容完全不同,后者告诉您传递整个request.FILES
。
评论后编辑看,您还没有给我们提供太多信息。您的模型有一个或两个图像吗?你为什么要分别处理这两个图像?您是要创建两个单独的模型实例,还是一个有两个图像?你究竟想做什么?
基本上你只想这样做:
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
就是这样。