2017-09-10 2 views
1

J'ai une vue de mise à jour pour que les utilisateurs mettent à jour leurs profils. Cependant, je continue d'obtenir cette erreur:Django Obtenir cette erreur avec UpdateView: NoReverseMatch at/user/2/edit

NoReverseMatch at /user/2/edit 
Reverse for 'user_profile' with no arguments not found. 1 pattern(s) tried: ['user/(?P<pk>\\d+)/$'] 

Rien de ce que j'ai essayé ne fonctionne (ajout d'un pk, etc.).

Le UpdateView:

class UserEditProfileView(LoginRequiredMixin,UpdateView): 
    login_url = '/login/' 
    model = UserProfile 
    fields = [ 
      'first_name', 
      'profile_pic', 
      'location', 
      'title', 
      'user_type', 
      'website', 
      'about', 
      'twitter', 
      'dribbble', 
      'github' 
      ] 
    template_name_suffix = '_edit_form' 
    success_url = reverse_lazy('users:user_profile') 

App urls:

from django.conf.urls import url 
from users import views 

app_name = 'users' 

urlpatterns = [ 
    url(r'^$',views.UserListView.as_view(),name='user_list'), 
    url(r'^(?P<pk>\d+)/$',views.detailprofile,name='user_profile'), 
    url(r'^(?P<pk>\d+)/edit$',views.UserEditProfileView.as_view(),name='user_profile_edit'), 
    url(r'^login/$',views.user_login,name='user_login'), 
    url(r'^logout/$',views.user_logout,name='user_logout'), 
    url(r'^register/$',views.register,name='register'), 
] 

Modifier le modèle de profil:

{% extends "users/base.html" %} 

{% block content %} 

    <div class="form-base"> 
     <h2>Edit Profile</h2> 
     <form method="POST"> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <input type="submit" value="Save" /> 
     </form> 
</div> 

{% endblock %} 

Le Je sais si tu as besoin de voir autre chose.

Répondre

1

Vous devez également fournir pk dans user_profile

class UserEditProfileView(LoginRequiredMixin,UpdateView): 
    login_url = '/login/' 
    model = UserProfile 
    fields = [ 
     'first_name', 
     'profile_pic', 
     'location', 
     'title', 
     'user_type', 
     'website', 
     'about', 
     'twitter', 
     'dribbble', 
     'github' 
     ] 
    template_name_suffix = '_edit_form' 

    def get_success_url(self): 
     userid = self.kwargs['pk'] 
     return reverse_lazy('users:user_profile', kwargs={'pk': userid}) 
+0

C'est ce que j'ai essayé mais il me donne une erreur de nom: 'NameError: nom « pk » est pas defined' – Garrett

+0

Jetez un oeil cela devrait fonctionner. –

+0

Cela a fonctionné, donc j'ai juste besoin d'utiliser une méthode 'get_success_url' pour établir le pk et le retourner. Je vous remercie. – Garrett