2013-04-06 12 views
6

Mam ListView i DeleteViewUsuwanie elementów z ListView w Django 1.5

class MyDeleteView(DeleteView): 
    success_url = reverse('list') 

Chcę możliwość usunięcia elementów w ListView. Wiem, jak to zrobić, jeśli zaakceptuję stronę z potwierdzeniem w DeleteView, ale nie chcę żadnego szablonu w moim DeleteView. Chcę tylko usunąć przedmiot i odesłać użytkownika.

Domyślam się, że powinno być z parametrami POST, ale jak powinien wyglądać HTML? Przypuszczam, że to coś takiego:

<form method="post" action="/delete/"> 
    <ul> 
     <li>Item1 (<input type="submit" value="Delete" />)</li> 
     <li>Item2 (<input type="submit" value="Delete" />)</li> 
     <li>Item3 (<input type="submit" value="Delete" />)</li> 
    </ul> 
</form> 

Czy każdy może mnie poprowadzić we właściwym kierunku? Dziękuję Ci.

Odpowiedz

0

Skoro nie chcesz potwierdzenia, można zastąpić metodę GET w deleteview i po prostu użyć linki:

class MyDeleteView(DeleteView): 
    success_url = reverse('list') 

    def get(self, *a, **kw): 
     return self.delete(*a, **kw) 

<ul> 
    {% for item in object_list %} 
     <li>Item1 (<a href="{% url 'mydelete' pk=item.pk %}">Delete</a>)</li> 
    {% endif %} 
</ul> 
+0

Co zrobić, jeśli muszę sprawdzić, czy użytkownik jest właścicielem obiektu? Czy jest coś takiego jak def dostać (self, * args, ** kwargs): \t self.object = self.get_object() \t jeśli self.object.user == self.request.user: \t \t return self.delete (* args, ** kwargs) \t else: – user2232982

+0

Tak, to by działało. Ale musisz zdecydować, co zrobić, jeśli nie jest (zwróć HttpResponseForbidden?) –

+2

-1 GET powinno być ** [bezpieczne] (http://www.w3.org/2001/tag/doc/whenToUseGet.html#safe) ** –

2

Jesteś już pozycją drogę right, z STANOWISKO.

<ul>{% for item in object_list %}   
    <li><form method="post" action="{% url 'mydelete' pk=item.pk %}"> 
      {{item}} (<input type="submit" value="Delete" />) 
    </form></li> 
{% endif %}</ul> 

Nie jestem do końca pewien, czy dane wejściowe mogą przejść bezpośrednio w formularzu w specyfikacji HTML, do której próbujesz się przyłączyć. Być może będziesz musiał posypać tą ideą pewnymi rozpiętościami lub pojemnikami.

Jeśli wejście przedstawienia, nie daje projektantom swobodę wystarczającą do stylizacji, można wykorzystać je jako <noscript> małego i dodać trochę <button> lub javascript: Link dla ładnej wersji.