2017-12-05 10 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]+)$'にしたくないです。これは、例えばユーザがブラウザでURL .../check/1を入力すると、残念ながら他人の情報を見ることができるからである。

上記のコードを実行すると、エラーReverse for 'accounts.views.CheckView' not found. 'accounts.views.CheckView' is not a valid view function or pattern name. が発生します。 CheckView(generic.DetailView)にリダイレクトする方法をURL include 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

関連する問題