2017-12-14 3 views
2

私はDjango DeleteViewを使ってオブジェクトを削除しています。まず、別のhtmlページをリダイレクトするdelete add confirmダイアログを実装しました。今、私はブートボックスのポップアップを追加したいと思います。しかし、私はどこにコードを追加するのか分かりません。 models.pyDjango DeleteViewにbootboxを使用するには?

助けてください

class Review(models.Model): 
    review_description = models.TextField(max_length=500) 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    book = models.ForeignKey(Book, on_delete=models.CASCADE) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 

views.py

class ReviewDelete(DeleteView): 
    model = Review 
    template_name = "confirm_delete.html" 

    def get_success_url(self, *args, **kwargs): 
    review = get_object_or_404(Review, pk=self.kwargs['pk']) 
    return reverse("books:detail", args = (review.book.id,)) 

confirm_delete.html

{% extends "base.html" %} 
{% block content %} 
<h1>Delete</h1> 
<p>Are you sure you want to delete {{ review }}?</p> 
<form action="{% url "delete" pk=review.id %}" method="POST"> 
    {% csrf_token %} 
    <input type="submit" value="Yes, delete." /> 
    <a href="{% url "books:detail" id=review.book.id %}">No, cancel.</a> 
</form> 
{% endblock %} 

book_details.html

<a href="{% url "delete" pk=review.id %}" class="badge badge-danger">Delete</a> 
{# <a href="{% url "delete" pk=review.id %}" class="badge badge-danger">Delete</a>#} 
0削除が完了したときに、サーバーのページには、リダイレクトを実行していないと仮定すると、

base.html

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#review-delete-btn").click(function (event) { 
      event.preventDefault(); 
      bootbox.confirm({ 
       title: "Destroy planet?", 
       message: "Do you want to delete? This cannot be undone.", 
       buttons: { 
        cancel: { 
         label: '<i class="fa fa-times"></i> Cancel' 
        }, 
        confirm: { 
         label: '<i class="fa fa-check"></i> Confirm' 
        } 
       }, 
       callback: function (result) { 
        console.log('This was logged in the callback: ' + result); 
       } 
      }); 
     }); 
    }); 
</script> 

urls.py

url(r'^reviews/(?P<pk>\d+)/delete/$', ReviewDelete.as_view(), name='delete'), 
+1

ブートボックスのポップアップには何を表示しますか? –

+0

私はブートボックスで削除したい。私はbootboxで何を書いてブロックを確認すべきか分からない。私はブートボックスの確認をクリックして削除したい、別のページをリダイレクトしない。 –

答えて

0

は、あなただけの確認コールバックにAJAX呼び出しを追加する必要があります。このような何か:

<script> 
    $(function() { 
     $("#review-delete-btn").on('click', function (event) { 
      event.preventDefault(); 

      // for referencing this later in this function 
      var _button = $(this); 

      bootbox.confirm({ 
       title: "Destroy planet?", 
       message: "Do you want to delete? This cannot be undone.", 
       buttons: { 
        cancel: { 
         label: '<i class="fa fa-times"></i> Cancel' 
        }, 
        confirm: { 
         label: '<i class="fa fa-check"></i> Confirm' 
        } 
       }, 
       callback: function (result) { 
        // result will be a Boolean value 
        if(result){ 
         // this encodes the form data 
         var data = _button.closest('form').serialize(); 

         $.post('your delete URL here', data). 
          done(function(response, status, jqxhr){ 
           // status code 200 response 
          }) 
          .fail(function(jqxhr, status, errorThrown){ 
           // any other status code, including 30x (redirects) 
          }); 
        } 
       } 
      }); 
     }); 
    }); 
</script> 

おそらく$.postserializeのマニュアルを確認したいと思うでしょう。私はまたAJAXのトピックを通してあなたのやり方を推し進めることをお勧めします - $ .postは$ .ajaxの便利な方法ですので、両方を使う方法を知っておく必要があります。

関連する問題