2011-02-03 10 views
0

私はアイテムのリストを表示するテンプレートを持っています。各項目に1つのチェックボックスがあります。私はチェックボックスがチェックされているときにチェックボックスから項目を削除したいと思っています。だから、チェックボックスを選択すると、アイテムを削除するボタンが必要になります。ここに私のテンプレートがあります。チェックボックスがオンになっている場合、チェックボックスを削除するにはどうすればよいですか?

{% for item in items %} 
     <tr> 
     <td><input type="checkbox" name="item" value="{{item.pk}}" checked="checked"></td> 
     <td>{{item.tiptop_id}}</td><td>{{item.alternative_id}}</td><td>{{item.title}}</td> 
     <td>{{item.type}}</td><td>{{item.format}}</td> 
     </tr> 
    {% endfor %} 

私はおそらく私の意見に書き込むものを知っている必要があります。

編集:

それはまだ削除されていない理由はわかりません。私の意見をチェックしてください。私の編集オーダーフォーム。それは静かな巨大です。私は削除機能がトリックをすると思った。とにかく見てみましょう。

def edit_order(request, order_no): 
# Alot of code here 
    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 = item 
        delete_item.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))) 
+0

クライアントサイドコードまたはサーバーサイドコードで削除しますか? – Cuga

+0

@Cuga違いはわかりませんが、基本的にはチェックされている間にボタンを介してアイテムを削除したいと思っています。そして、私はそれのためのコードをしたい。 – Shehzad009

+0

「アイテムを削除する」とは、「Webページのリストからすぐに削除する」か、「送信ボタンをクリックさせてから、djangoサーバがそのアイテムをデータベースから削除する」という意味ですか? – Spacedman

答えて

1

POSTデータを取得し、チェックボックスがチェックされていることを確認し、idでマッチしたデータベースからアイテムを削除するビューを作成する必要があります。

デコレータでビューをラップして、ユーザーがアイテムを削除する権限を持っていることを確認したり、ログインしているユーザーが削除するアイテムの所有者と同じであることを確認することもできます物事をしたい。

または、Djangoのフォームフレームワークを使用して重い作業の一部を処理できます。

データベースからオブジェクトを削除する方法については、dbモデルのマニュアルを参照してください。

これらのことはまったく簡単なことではありませんので、ここで完全に解決するにはあまりにも長い時間待たないでください - ハッキングしてください!

+0

これは今行っているようです。ありがとう – Shehzad009

0

[編集]:本当の問題は、HTMLのテーブルから行を削除しないで、フォームの送信にデータベースから項目を削除できることです 。このページの「簡単なフォーム処理の例」を参照してください。Tutorial for form submissions in Django. [/編集]

ここでは、コンピュータ上の.htmlファイルにコピーしてWebブラウザで開くことができる例を示します。それは単純なJavaScriptを使用しています。このような場合は、jQueryを使用することをお勧めしますが、用途によっては、オーバーヘッドが多い場合があります。しかし、クライアント側のプログラミングをたくさん行う必要がある場合は、jQueryの使用を強くお勧めします。

注:parentNode.parentNode.parentNodeを使用するとちょっと混乱しますが、この例では元の投稿に表/チェックボックスの設定を意図的に使用しています。

私は、各チェックボックスに関連するテーブルの行にIDを割り当てて、アクセスしやすくすることをお勧めします。

元の投稿で尋ねられたので、<input type="button">も含めました。 onclick=イベントを各チェックボックスに割り当てることを検討して、ユーザーがクリックされるとすぐにアイテムを削除できるようにすることをおすすめします。しかしそれは好みです。

<html> 
<head> 
<script> 

function hideCheckedRows() { 
    var checkboxes = document.getElementsByName("item"); 
    var checkboxes_to_remove = new Array(); 
    var count = 0; 
    for (var i = 0; i < checkboxes.length; i++) { 
     if (checkboxes[i].checked == true) { 
      checkboxes_to_remove[count++] = checkboxes[i]; 
     } 
    } 
    for (var i = 0; i < checkboxes_to_remove.length; i++) { 
     cbx = checkboxes_to_remove[i]; 
     // parentNode.parentNode.parentNode is the <tr> 
     // parentNode.parentNode is the <td> containing the checkbox 
     cbx.parentNode.parentNode.parentNode.removeChild(
              cbx.parentNode.parentNode); 
    } 
} 
</script> 
</head> 
<body> 

<table> 
    <tr name="table_row"> 
     <td><input type="checkbox" name="item" value="Check1"></td> 
     <td>Id1</td><td>Alt_Id1</td><td>Title1</td> 
      <td>Type1</td><td>Format1</td> 
    </tr> 
    <tr name="table_row"> 
     <td><input type="checkbox" name="item" value="Check2"></td> 
     <td>Id2</td><td>Alt_Id2</td><td>Title2</td> 
      <td>Type2</td><td>Format2</td> 
    </tr> 
    <tr name="table_row"> 
     <td><input type="checkbox" name="item" value="Check3"></td> 
     <td>Id3</td><td>Alt_Id3</td><td>Title3</td> 
      <td>Type3</td><td>Format3</td> 
    </tr> 
</table> 

<input type="button" value="Click to remove checkboxes!" 
     onclick="hideCheckedRows();"/> 

</body> 
</html> 

編集:

アイテムがデータベースから削除したい場合は、我々はより多くの情報が必要。使用されているデータベースの種類と、送信ボタンの "POST"を処理するサーバー側コードがどのようなものかを知る必要があります。この例では、ユーザーのWebブラウザのテーブルからチェックボックスが削除されますが、データベースの内容には影響しません。

+0

はい、それは削除されますが、データベースに保存されないため正しいです。私は実際に編集オーダーフォームに保存ボタンを持っていますが、それはうまくいかないようです。私はmysqlデータベースを使用します。サーバー側のコード、あなたは私がviews.pyで何かする必要があると言っていますか? – Shehzad009

+0

あなたはあなたのpythonコードでフォームの提出を処理する必要があります。このチュートリアルを参照してください:http://www.djangobook.com/en/1.0/chapter07/ – Cuga

0

あなたはそれを間違っています:)削除のためだけにビューを作成してください。要素のPOSTまたはGET IDを(またはURLで)送信し、要素をdbから削除し、応答として削除された要素を除いてリストを送信します。このような

何か:あなたのテンプレートで

def delete_element(request, id): 
    el = get_object_or_404(Element, id=id) 

    if el: 
     el.delete() 

    html = render_list(request) 

    if request.is_ajax(): 
     result = simplejson.dumps({ 
      "html": "html", 
     }, cls=LazyEncoder) 
     return HttpResponse(result, mimetype='application/javascript') 

def render_list(request): 
    elements = Element.objects.all() 
    return render_to_string(template_name, RequestContext(request, { 
     "element" : elements, }) 

そして、あなたの最初の呼び出しのJavaScriptを使用して削除機能のURLと、その後の成功には、データとテンプレート[「HTML」]を更新します。

この男に質問することができます:http://twitter.com/sasklacz彼はあなたに必要な正確なコードを与えるためにdjangoのajaxに関するチュートリアルを書いています。

+0

ajaxを使用せずに削除する別の方法はありますか? – Shehzad009

関連する問題