2015-05-14 15 views
15

Próbuję przekierować na stronę, którą zamierzam zaimplementować jako stronę główną obiektu po jej utworzeniu.Django "get() otrzymało nieoczekiwany argument słowa kluczowego" pk "" error

Poniżej jest odpowiednia część mojego 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 :)") 

i odpowiadająca część mojego urls.py;

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

Ale pojawia się wspomniany błąd;

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

Ktoś proszę mi pomóc.

Odpowiedz

29

Funkcja uzyskuje jeden argument więcej niż powinien. Zmień go na adres:

def get(self, request, pk): 

Wartość pk będzie równa wzoru, który został dopasowany, a odkąd podano, że będzie to numer, typ PK będzie int.

+0

Ups głupio mi, dziękuję dużo :) –

+0

@wobbily_col Nie jestem pewien, czy to robi różnicę, czy używasz ** kwargs lub po prostu dodać kolejny argument. Nie sądzę, abym kiedykolwiek użył ** kwargs, aby uzyskać zawartość adresu URL! Jest to prostsze, ponieważ jest to tylko jeden (lub w innym przypadku - kilka) argumentów. – rohithpr

+0

Jest on nadal przekazywany jako argument słowa kluczowego, więc będzie obecny w ** kwargs. Uruchom go w debugerze i będzie na nim. –

4

dodać kwargs do definicji metoda:

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

Czy możesz sprawdzić http://stackoverflow.com/questions/30260201/django-typeerror-user-object-is-not-iterable Mam odpowiedź na oryginalne pytanie, ale mam dalsze problemy. Przejdź przez sekcję komentarzy zaakceptowanej odpowiedzi, jedyną. –

Powiązane problemy