2015-05-14 10 views
15

Sto provando a reindirizzare a una pagina che intendo implementare come home page di un oggetto dopo la creazione di uno.Django "get() ha ottenuto un errore di parole chiave inaspettato 'pk'" errore

seguito una corrispondente parte del mio views.py

  new_station_object.save() 
      return HttpResponseRedirect(reverse("home_station", 
               kwargs={'pk': new_station_object.id} 
      )) 

class StationHome(View): 
    def get(self, request): 
     return HttpResponse("Created :)") 

e corrispondente parte del mio urls.py;

url(r'^station/(?P<pk>\d+)$', StationHome.as_view(), name='home_station'), 

Ma ottengo il suddetto errore;

TypeError at /station/2 
get() got an unexpected keyword argument 'pk' 

Qualcuno, per favore, aiutami.

risposta

29

La funzione sta ottenendo un argomento più di quanto si suppone. modificarla in:

def get(self, request, pk): 

Il valore di pk sarà uguale al modello che è stato abbinato, e dal momento che hai specificato che sta andando essere un numero, il tipo di pk sarà int.

+0

Ops stupido me, grazie un sacco :) –

+0

@wobbily_col Non sono sicuro se fa la differenza se si utilizza kwargs ** o semplicemente aggiungere un altro discussione. Non penso di aver mai usato ** kwargs per ottenere il contenuto di un url! Questo è più semplice in quanto è solo uno (o in altri casi) alcuni argomenti. – rohithpr

+0

È ancora passato come argomento di parole chiave, quindi sarà presente in ** kwargs. Eseguilo in un debugger e sarà lì. –

4

aggiungere le kwargs nella definizione del metodo:

def get(self, request, *args, **kwargs): 
    return HttpResponse("Created :)") 
+0

Potresti controllare http://stackoverflow.com/questions/30260201/django-typeerror-user-object-is-not-iterable. Ho la risposta alla domanda originale ma ho ulteriori problemi. Si prega di passare attraverso la sezione di commento della risposta accettata, l'unica. –

Problemi correlati