2017-01-28 1 views
0

J'ai un Django CreateView qui est censé rediriger vers une URL avec un UUID dans le querystring:reverse_lazy ne correspondant pas à kwargs

@method_decorator(xframe_options_exempt, name='dispatch') 
class ActivityCreateView(CreateView): 

    template_name = 'embedded/activities/create.html' 
    form_class = ActivityCreateUpdateForm 

    def get_success_url(self): 
     return reverse_lazy('embedded:activity_status', kwargs={'unieke_code': self.object.access_link}) 

Cela donne cependant l'erreur familière:

Reverse for 'activity_status' with arguments '()' and keyword arguments '{'unieke_code': UUID('470e3a5f-6f52-414e-a431-bf5c6e68509a')}' not found. 1 pattern(s) tried: ['embedded/activiteiten/status/']

La chose étrange est qu'il trouve apparemment le modèle, mais ne correspond toujours pas. Ceci est mon urls.py:

urlpatterns = [ 
    url(r'^activiteiten/$', views.ActivitiesIndexView.as_view(), name='activities_index'), 
    url(r'^activiteiten/aanmelden/$', views.ActivityCreateView.as_view(), name='activity_create'), 
    url(r'^activiteiten/status/', views.ActivityStatusView.as_view(), name='activity_status'), 
] 

Bizarrement quand je vais à mysite.com/embedded/activiteiten/status/?unieke_code=470e3a5f-6f52-414e-a431-bf5c6e68509a il fonctionne.

Répondre

2

Les fonctions reverse et reverse_lazy ne sont pas destinées à transmettre les paramètres GET. C'est la raison pour laquelle cela échoue.

Quelque chose comme cela devrait fonctionner:

url = reverse_lazy('embedded:activity_status') 
params = urlencode({'unieke_code': self.object.access_link}) 
return '{0}?{1}'.format(url, params) 

Side note: En Python 2, vous devez importer urlencode de urllib et en Python 3, il est en urllib.parse

+0

Merci! Je suppose que je n'ai pas assez lu la documentation :) –