2017-05-06 22 views
1

Das glaube, ich versuche zu tun ist, um auf die gleiche Seite wo Benutzer war, wenn ein Element gelöscht wurde. Nach dem Löschen mit "django.views.generic.edit" (DeleteView) kann ich alle benötigten Informationen im Modell sammeln und die spezifische Kategorie, die ich brauche. Die Frage ist, wie kann ich diese Anfrage URL erstellen gehen?Django Redirect zu Vorlage Modell übergeben

So kann ich zu http://127.0.0.1:8000/productlist/floor/

<a class="dropdown-item" href="{% url 'productlist' 'floor' %}" > 

views.py

class LampDelete(DeleteView): 
model = Lamp 
#success_url = reverse_lazy('index') 

def get_success_url(self): 
    categ = self.object.category 
    lamps = Lamp.objects.filter(category=categ) 
    return redirect('productlist', {'lamps': lamps}) 

urls.py

urlpatterns =[ 
url(r'^$', views.index, name='index'), 
url(r'^productlist/([a-z0-9]+)/$', views.productlist, name='productlist'), 
url(r'^accounts/', include('allauth.urls')), 
url(r'productlist/(?P<pk>[0-9]+)/delete/$', views.LampDelete.as_view(), name='lamp-delete'),] 

Also, welche Methode sollte ich zu meiner Vorlage umleiten verwenden und wie man mit ausgewähltem Kategoriemodell. Wenn jemand ein Beispiel geben könnte wäre sehr dankbar.

Antwort

2

Eigentlich haben Sie immer noch Objekt in .get_success_url(),

Von source code:

class DeletionMixin(object): 
    def delete(self, request, *args, **kwargs): 
     """ 
     Calls the delete() method on the fetched object and then 
     redirects to the success URL. 
     """ 
     self.object = self.get_object() 
     success_url = self.get_success_url() 
     self.object.delete() 
     return HttpResponseRedirect(success_url) 

Wie Sie sehen können, zunächst berechnet sie success_url und löscht sie dann das Objekt.

Was du falsch gemacht hast:

  1. Statt url als str Objekt zu versorgen Sie redirect genannt, die Umleitung auslöst und überspringt den gesamten Prozess der Löschung.
  2. redirect Stellen mit url Argument anzuzeigen queryset Versorgung und nicht str wie es ([a-z0-9]+)

gewartet hat glaube ich, dass Sie in productlist Ansicht eine Art Name der Kategorie erwarten, durch die Ihre Produkte

gefiltert

Also, was können Sie tun,:

  1. Return gültig str obj in .get_success_url()

z.

class LampDelete(DeleteView): 
    model = Lamp 

    def get_success_url(self): 
     category = self.object.category 
     return reverse('productlist', args=[category]) 
+0

Kategorie ist bereits ein Feld von Lampenmodell, aber wenn ich nur zurückgeben Rückwärts passieren (‚Produktliste‘, { ‚Kategorie‘: Kategorie}) Ich Typeerror erhalten: unhashable Typ: ‚dict‘. Selbst wenn Kategorie serj

+0

@serj ist ja, das ist, weil Sie 'str' Objekt übergeben müssen, das Sie in' views.productlist' verwenden. Ich glaube, es könnte Name von 'Category' Objekt sein oder etwas in Bezug auf' Category' Objekt –

+0

das ist meine views.productlist def Produktliste (Anfrage, Kategorie): MEDIA_URL = settings.MEDIA_URL lamps = Lamp.objects.filter (category = categ) return render (Anfrage, 'productlist.html', {'lamps': Lampen, 'MEDIA_URL': MEDIA_URL}) Welches Objekt sollte ich übergeben? – serj

Verwandte Themen