2016-06-11 1 views
0

J'essaye d'implémenter des vues d'édition génériques comme montré here:DJANGO Generic Views: Comment utiliser reverse() dans la méthode get_absolute_url?

J'ai commencé avec le CreateView qui rend et soumet des données correctement. Toutefois, j'obtiens une erreur lorsque j'essaie d'utiliser reverse() pour revenir à la page de vue détaillée du nouvel objet.

Voici mon message d'erreur:

NoReverseMatch à/travail/clients/créer/ inverse pour 'ClientDetailView' avec des arguments '(' 14' ,) » et arguments mot-clé '{}' not found . 0 modèle (s) a essayé: []

Voici comment je définissais get_absolute_url() dans mon modèle:

def get_absolute_url(self): 
    return reverse('ClientDetailView', kwargs={'pk': self.pk}) 

Mon point de vue est appelé ClientDetailView. Je ne suis pas sûr de savoir quelle autre information serait utile.

Voici la classe ClientDetailView:

class ClientDetailView(generic.DetailView):  
    model = Client 
    template_name = 'work/client_detail.html'` 

et voici url() de urls.py:

url(r'^clients/(?P<pk>[0-9]+)/$', views.ClientDetailView.as_view(), name='clients_detail'),` 

Quelqu'un peut-il expliquer ce que je fais mal?

Répondre

0

J'ai résolu mon propre problème. Je devais ajouter l'espace de noms à la méthode inverse():

return reverse('work:clients_detail', kwargs={'pk': self.pk}) 

Je vous serais reconnaissant si quelqu'un d'autre pourrait expliquer pourquoi je devais le faire.

Voici le mon complet urls.py: de django.conf.urls import url

from . import views 

app_name = 'work' 
urlpatterns = [ 
    url(r'^work_orders/$', views.WorkOrdersIndexView.as_view(), name='quotes_index'), 
    url(r'^work_orders/(?P<pk>[0-9]+)/$', views.WorkOrdersDetailView.as_view(), name='work_orders_detail'), 
    url(r'^quotes/$', views.QuotesIndexView.as_view(), name='quotes_index'), 
    url(r'^quotes/(?P<pk>[0-9]+)/$', views.QuotesDetailView.as_view(), name='quotes_detail'), 
    url(r'^project/(?P<pk>[0-9]+)/$', views.ProjectDetailView.as_view(), name='project_detail'), 
    url(r'^project/create/$', views.ProjectCreateView.as_view(), name='project_create'), 
    url(r'^project/(?P<pk>[0-9]+)/update/$', views.ProjectUpdateView.as_view(), name='project_update'), 
    url(r'^project/(?P<pk>[0-9]+)/delete/$', views.ProjectDeleteView.as_view(), name='project_delete'), 
    url(r'^clients/$', views.ClientView.as_view(), name='client_index'), 
    url(r'^clients/(?P<pk>[0-9]+)/$', views.ClientDetailView.as_view(), name='clients_detail'), 
    url(r'^clients/create/$', views.ClientCreateView.as_view(), name='client_create'), 
    url(r'^clients/(?P<pk>[0-9]+)/update/$', views.ClientUpdateView.as_view(), name='clients_update'), 
    url(r'^clients/(?P<pk>[0-9]+)/delete/$', views.ClientDeleteView.as_view(), name='clients_delete'), 


] 
+1

Sans votre fichier urls.py (s) c'est difficile à dire. Aussi, il se pourrait que la correction de 'reverse ('ClientDetailView' ...' '' reverse ('clients_detail', 'aurait été suffisant.) – tobltobs

+0

@tobltobs J'ai ajouté mon fichier urls.py au commentaire principal –

+0

vous incluez ce fichier ailleurs, par exemple dans une application de base? Avez-vous testé avec 'reverse ('clients_detail', ..'? – tobltobs

0

vous en train d'essayer d'inverser la vue, au lieu de ClientDetailView utiliser le nom url clients_detail