我想在我的django模型中设置一个可选的图像场。我在图像域中设置了空白=真,空=真。输入以下代码后,我在除place_4_view之外的所有图像域中输入图像。点击上传按钮后,我收到一个错误。我错过了什么?
模型
class Findme(models.Model):
place_2_view=models.ImageField(upload_to="photos",blank=True,null=True)
place_3_view=models.ImageField(upload_to="photos",blank=True,null=True)
place_4_view=models.ImageField (upload_to="photos",blank=True,null=True,help_text='Optional.')
上传时出错
Request Method: POST
Request URL: http://127.0.0.1:8000/find/
Django Version: 1.4
Exception Type: MultiValueDictKeyError
Exception Value: "Key 'place_4_view' not found in <MultiValueDict: {u'place_2_view': [<TemporaryUploadedFile: 2012-05-17-289.jpg (image/jpeg)>], u'place_3_view': [<TemporaryUploadedFile: Crimo.JPG (image/jpeg)>]}>"
Exception Location: C:\Python27\lib\site-packages\django\utils\datastructures.py in __getitem__, line 258
Python Executable: C:\Python27\python.exe
浏览
def findpic(request):
extra_data_context={}
#if there's nothing in the field do nothing.
if request.method=="POST":
form=FindmeForm(request.POST, request.FILES)
if form.is_valid():
data=form.cleaned_data
newfindmes=Findme(
user=request.user,
pub_date=datetime.datetime.now(),
place_2_view=request.FILES['room_2_view'],
place_3_view=request.FILES['room_3_view'],
place_4_view=request.FILES['room_4_view'])
newfindmes.save()
extra_data_context.update({'FindmeForm':form})
else:
form = FindmeForm()
extra_data_context.update({'FindmeForm':form})
extra_data_context.update({'Findmes':Findme.objects.filter(user=request.user)})
return render_to_response('postme.html',extra_data_context,context_instance=RequestContext(request))
模板
{% block content %}
<form enctype="multipart/form-data" form action="." method="POST">
{% csrf_token %}
<div class="post-fed">{{ FindmeForm.as_p}}</div>
<input type="submit" value="Get It"/>
</form>
{% for Findme in Findmes.object_list %}
<tr>
<p> {{Findme.pub_date|timesince }} ago </p>
<p><img src="{{Findme.thumbnail_2.url}}" width="83" height="78">
<img src="{{Findme.thumbnail_3.url}}" width="83" height="78"> {% if Findme.thumbnail_4 %} <img src="{{Findme.thumbnail_4.url}}" width="83" height="78"/>
{% endif %}
<p> Created By {{ Findme.user }}</p>
{% endfor %}
{% endblock %}
答案 0 :(得分:0)
您似乎拥有代码,希望在表单提交期间密钥位于表单中。
编辑: 你的findPic方法试图获取字段,当字段为空时字段不存在。我建议使用request.FILES.get并指定一个默认值,或者测试request.FILES是否存在密钥,或者迭代密钥本身。基本上,您的代码需要为request.FILES准备要为空或不包含您尝试访问的所有字段。
有关使用request.FILES.get和this answer的示例,请参阅Files Django Docs以获取有关request.FILES对象的其他详细信息。