2012-02-11 60 views
1

我在我的views.py以下几种观点:Django的对象不存在

def MoveSucessfulEntries(request): 
    if request.method == 'POST': 
     objectsToBeDeleted = request.POST['imagesToBeRemoved'] 
     for objects in objectsToBeDeleted: 
      print objects 
      image = Image.objects.get(id=objects) 
      SucessfulImage(emailAddress=image.emailAddress, image=image.image, caption=image.caption).save() 
     return render_to_response('images/selectedSucessful.html') 
    else: 
     images = Image.objects.all() 
     return render_to_response('images/deleteUnsucessfulEntries.html', {'images': images}) 

imagesToBeRemoved是具有它像这样生成的数据库中的图像的ID在HTML页面上的复选框:

<form method="POST" action="/image/selectSucessful"> 
    {% if images %} 
     {% for image in images %} 
      <input type="checkbox" name="imagesToBeRemoved" value="{{image.id}}" /> <image src="../media/{{image.image}}"> <br> 
     {%endfor%} 
     <input type="submit" value="Select" /> 
    {% else %} 
     <p>No images are available.</p> 
    {% endif %} 
</form> 

所以我知道窗体返回的ID在数据库中,但我不断收到错误对象不存在。我的代码有什么问题?

堆栈跟踪说,错误发生在:

image = Image.objects.get(id=objects) 
+1

什么对象不存在?这个错误指的是什么? – Dirk 2012-02-11 22:18:06

+0

请参阅编辑... – Dean 2012-02-11 22:20:24

+0

它可能是复选框的值是一个字符串,我想象的ID是一个i​​nt/long尝试从'value =“foo”中删除引号“很确定仍然有效的html – 2012-02-11 22:31:16

回答

2

的问题是你得到一个字符串

objectsToBeDeleted = request.POST['imagesToBeRemoved'] 

既然您发布的多个数据,你想要的是:

objectsToBeDeleted = request.POST.getlist('imagesToBeRemoved') 

字符串是可迭代的,所以你遍历每个数字,也就是说,如果你想DELE如果某个项目的ID为345,它实际上会尝试删除ID为3,4和5的项目。