2011-02-04 61 views
3

POSTデータを取得し、チェックボックスがチェックされていることを確認し、idでマッチしたデータベースからアイテムを削除するビューを作成するのに役立つ必要があります。 元々、これはチェックボックスの問題でした。編集オーダーフォームには、アイテムのリストがあります。今私は、JavaScriptのビットを使用してアイテムを削除することができますが、それは私のデータベースから完全に削除する必要があるため、保存されません。私はdelete()を使ってアイテムを削除するために私の編集オーダービューを使ってみましたが、doeは動作しません。私は間違っている何か他のものがなければならないが、何がわからない。Django:チェックボックスを使ってアイテムを削除するビューを作成する

name="item"でチェックボックスを使用して、テンプレートを考えると
delete_item = request.POST.get('delete_item', None) 
    if request.method == 'POST': 
     form = forms.OrderForm(request.POST, instance = order) 
     if form.is_valid() and save_item is not None: 
      form.save(True) 
      request.user.message_set.create(message = "The order has been updated successfully.") 
      return HttpResponse("<script language=\"javascript\" type=\"text/javascript\">window.opener.location = window.opener.location; window.close();</script>") 

     if status is not None and contact is not None and save_status is not None and delete_item is not None: 
      try: 
       for id in status_items: 
        item = models.StorageItem.objects.get(pk = id) 
        delete = item 
        delete.delete() 
        current_status = models.ItemStatusHistory(item = item, contact = contact, status = status, 
                user = request.user) 
        current_status.save() 
      except: 
       pass 
      request.user.message_set.create(message = "Status successfully changed for {0} items".format(len(status_items))) 

{% for item in items %} 
     <tr class="items_table_row"> 
       <td><input type="checkbox" name="item" value="{{item.pk}}" checked="checked"{% endif %}> 
       <td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td><td>{{item.type}}</td><td>{{item.format}}</td> 
       <td><span id="{{item.pk}}" name="type">{{item.itemstatushistory_set.latest}}</span></td><td>{{item.itemstatushistory_set.latest.date.date|date:"d M Y"}}</td> 
       <td><a href="{% url tiptop.views.edit_item item.client.pk item.pk %}" onclick="return showAddAnotherPopup(this);">Edit</a></td> 
     </tr> 
{% endfor %} 
+0

コードインデントを修正してください。 – Ski

+0

@skirmantas fixed – Shehzad009

答えて

5

... .delete()が動作するはずです。

Items.objects.filter(id__in=request.POST.getlist('items')).delete() 

例外が発生していますか? delete()コードはこれまで実行されていますか? printステートメントを投げる。

「コードのトン」、われわれがよく慣れていない多くの条件、try/exceptブロックがあるので、実際にはビューが実際に削除段階になっていることを確認したいと思う。

更新:これはコードの見知らぬ人として従うべき大まかなコードです。
if status is not None and contact is not None and save_status is not None and delete_item is not None:

代わりに、特定のボタンが押されたことを確認してください。

# html 
<input type="submit" name="save" value="Save Items" /> 
<input type="submit" name="delete" value="Delete Items" /> 

# view 
if request.POST.get('delete'): 
    Items.objects.filter(id__in=request.POST.getlist('items')).delete() 
elif request.POST.get('save'): 
    form = Form(request.POST) 
# ... so on 
+0

よく、私はdelete()ステージの後にprintステートメントをスローしても、印刷する必要はありません。私はあなたと同じと仮定します。私は削除の段階に行きたくはありません。 – Shehzad009

+0

ええ、それはあなたの問題です。 '状態がNoneでなく、連絡先がNoneでなく、save_statusがNoneではなく、delete_itemがNoneでない場合、'は従うべき厳しい行です。なぜ私はもっと簡単なアプローチを提案しないのですか? –

+0

これは意味がありますが、これはまだ動作しません。 Items.objects.filter(id__in = request.POST.getlist( 'items'))。delete()。この行と関係があります。実際にはitems = models.StorageItem.objects.filter(orderstoragelist__order__pk = order.pk)というようにアイテムは私のビューで定義されています。しかし、StorageItemをItemsに置き換えても、それでも削除することはできません。 – Shehzad009

関連する問題