2017-12-14 2 views
2

Ich verwende Django DeleteView zum Löschen von Objekten. Zuerst implementierte ich delete add confirm dialog um eine andere html Seite umzuleiten. Jetzt möchte ich Bootbox Pop-up hinzufügen. Aber ich verstehe nicht, wo ich Code hinzufügen soll. Bitte helfenWie verwende ich die Bootbox für Django DeleteView?

models.py

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>#} 

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

Was möchten Sie im Bootbox-Popup anzeigen? –

+0

Ich möchte nach Bootbox löschen. Ich verstehe nicht, was ich im Bootbox-Bestätigungsblock schreiben soll. Ich möchte löschen, indem ich auf bootbox confirm klicke und keine andere Seite weiterleite. –

Antwort

0

Serverseite Unter der Annahme, Umleitungen nicht durchführen, wenn die Lösch Abschluss, müssen Sie nur einen AJAX-Aufruf an die bestätigen Sie Rückruf hinzuzufügen. Etwas wie folgt aus:

<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> 

Sie werden wahrscheinlich wollen die Dokumentation für $.post und serialize überprüfen. Ich würde auch empfehlen, sich durch die AJAX Themen zu arbeiten - $ .post ist eine bequeme Methode für $ .ajax, also sollten Sie wissen, wie man beide benutzt.

Verwandte Themen