2013-04-06 16 views
6

Ich habe eine Listview und ein DeleteViewLöschen Artikel von Listview in Django 1.5

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

ich die Möglichkeit, wollen die Elemente in der Listview zu löschen. Ich weiß, wie es geht, wenn ich die Bestätigungsseite in der DeleteView akzeptiere, aber ich möchte keine Vorlage in meinem DeleteView. Ich möchte nur den Artikel löschen und den Benutzer zurücksenden.

Ich denke, es sollte mit POST-Parametern sein, aber wie sollte der HTML aussehen? Ich denke, es ist etwas wie:

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

Kann jemand mich in die richtige Richtung führen? Vielen Dank.

Antwort

0

Da Sie keine Bestätigung möchten, können Sie die GET-Methode in Ihrer deleteview außer Kraft setzen und nur Links:

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

Was ist, wenn ich überprüfen muss, ob der Benutzer der Besitzer des Objekts ist? Ist es so etwas wie def bekommen (self, * args, ** kwargs): \t self.object = self.get_object() \t wenn self.object.user == self.request.user: \t \t return self.delete (* args, ** kwargs) \t sonst: – user2232982

+0

Ja, das würde funktionieren. Aber Sie müssen entscheiden, was zu tun ist, wenn er nicht ist (zurück HttpResponseForbidden?) –

+2

-1 GET sollte ** [sicher] sein (http://www.w3.org/2001/tag/doc/whenToUseGet.html#safe) ** –

2

Sie sind bereits die right Weg Überschrift, mit POST.

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

Ich bin nicht ganz sicher, ob die Eingänge direkt in einer Form, in der HTML-Spezifikation gehen Sie zu halten versuchen. Sie müssen diese Idee mit einigen Spannweiten oder Containern bestreuen.

Wenn die Eingabe senden, nicht Ihren Designern genug Styling Freiheit geben, könnten Sie sie als Fallback verwenden und fügen Sie einige <button> oder javascript: link für die hübsche Version.