2017-12-05 5 views
1

Django1.11로 가입 양식을 만들고 싶습니다.
Django : URL에 pk없이 DetailView로 리디렉션

새 사용자 후 urls.py

app_name = 'accounts' 

urlpatterns = [ 
    url(r'^create/$', views.SignUpView.as_view(), name='create'), 
    url(r'^check/$', views.CheckView.as_view(), name='check'), 
    url(r'^update/$', views.CorrectView.as_view(), name='update'), 
    # ... 
] 

views.py

class SignUpView(CreateView): 
    model = User 
    form_class = UserForm 
    template_name = "accounts/create.html" 

    def get_success_url(self): 
     check_view = CheckView.as_view() 
     return redirect(check_view, pk=self.object.pk) 

class CheckView(DetailView): 
    model = User 
    template_name = "accounts/check.html" 

class CorrectView(UpdateView): 
    model = User 
    form_class = UserForm 
    template_name = "accounts/create.html" 

    def get_success_url(self): 
     check_view = CheckView.as_view() 
     return redirect(check_view, pk=self.object.pk) 

이 SignUpView (generic.CreateView)에서 자신의 정보를 입력, 그는 볼 것 그는 단지 CheckView (generic.DetailView)에 입력을했으며, 실수를 저 지르면 정보를 다시 입력합니다. n CorrectView (generic.UpdateView)에 있습니다.

나는 예를 들어 URL을 r'^check/(?P<pk>[0-9]+)$'으로 만들고 싶지 않습니다. 사용자가 예를 들어 브라우저에서 .../check/1이라는 URL을 입력하면 불행히도 그는 다른 사람의 정보를 볼 수 있기 때문입니다.

위 코드를 실행하면 Reverse for 'accounts.views.CheckView' not found. 'accounts.views.CheckView' is not a valid view function or pattern name. 오류가 발생합니다. 제발 어떻게 체크 포인트 (generic.DetailView)에 리디렉션하는 방법을 알려주지 않고 pk를 포함하십시오.

+0

여기에서 인증을 사용하고 있습니까? 그렇다면 인증 된 사용자의 정보 만 표시 할 수 있습니까? –

답변

1

당신은 예를 들어, 슬러그를 사용하지 않는 당신의 URL의 구조를 변경할 수는 :

# Url dell'app accounts. 
url(r'^accounts/register/$', RegistrationView.as_view(form_class=CustomUserForm), name='registration-register'), 
url(r'^accounts/profile/$', UserProfileView.as_view(), name='user-profile'), 
url(
    r'^accounts/profile/(?P<company>[-\w]+)/modifica/$', 
    UpdateCompanyView.as_view(), 
    name='update-company-view-profile' 
), 
url(
    r'^accounts/change-password/$', 
    password_change, {'post_change_redirect': 'user-profile'}, name='password_change' 
), 
url(r'^accounts/update/$', UserProfileUpdateView.as_view(), name='user-profile-update'), 
url(r'^accounts/', include('registration.backends.hmac.urls')), 

이 는 내가 조작 할 수 있어요 .. 난 내 프로젝트에서 사용하고있는 URL의 구조 사용자, 또는 단순히 request.user!를 사용하여 정보를 얻으십시오!

+0

고마워요! 이 솔루션은 헬 풀입니다! 나는 너를 존경한다! – Zuya

+0

도움이 된 것을 기쁘게 생각하는 @Zuya :) – alessioferri20

관련 문제