2017-09-12 11 views
2

私はDjangoに新規で、Django 1.11でアプリケーションを書いています。Djangoはauthユーザープロフィールを編集します

私はProfile updateページを作成します。

私は127.0.0.1:8000/accounts/updateにアクセスすると、それは

AttributeError at /accounts/update/ 

Generic detail view UpdateProfile must be called with either an object pk or a slug. 
を与えるすべてのプロファイルに関連する活動を管理するためのアプリ accountsを作成し、

from django.contrib.auth.models import User 

# Create your views here. 
from django.views.generic import TemplateView, UpdateView 


class ProfileView(TemplateView): 
    template_name = 'accounts/profile.html' 


class ChangePasswordView(TemplateView): 
    template_name = 'accounts/change_password.html' 


class UpdateProfile(UpdateView): 
    model = User 
    fields = ['first_name', 'last_name'] 

    template_name = 'accounts/update.html' 

myapp/accounts/urls.py

from django.conf.urls import url 

from . import views 

app_name = 'accounts' 
urlpatterns = [ 
    url(r'^$', views.ProfileView.as_view(), name='profile'), 
    url(r'^profile/', views.ProfileView.as_view(), name='profile'), 
    url(r'^change_password/', views.ChangePasswordView.as_view(), name='change_password'), 
    url(r'^update/', views.UpdateProfile.as_view(), name='update'), 
    url(r'^setting/', views.SettingView.as_view(), name='setting') 
] 

でクラスを作成しました

以来、私はログに記録したいプロフィール情報を編集するためにユーザに表示されます。私はURLにpkを渡したくありません。ジャンゴ1.11でプロフィール更新ページを作成する方法

答えて

1
class UpdateProfile(UpdateView): 
    model = User 
    fields = ['first_name', 'last_name'] 

    template_name = 'accounts/update.html' 

    def get_object(self): 
     return self.request.user 

エラーは、あなたがオブジェクトをprecisingていない場合はPKやスラグを返す必要が、あなたに言ったよう。だから、get_objectメソッドをオーバーライドすることで、更新したいオブジェクトをdjangoに伝えることができます。

あなたが別の方法でそれを行うことを好む場合は、URL内のオブジェクトのPKやスラグを送ることができます。

url(r'^update/(?P<pk>\d+)', views.UpdateProfile.as_view(), name='update') 

をここではデフォルトget_object方法は、引数にPKをキャッチしています更新するユーザー

ユーザーがプロフィールを更新して認証する場合(self.request.user)、2番目の方法では実際にユーザーの希望どおりに更新することができますこのユーザのpk(accounts/update/1は、pk = 1などでユーザを更新します)。

一部DOC here、GET_OBJECT()セクション

ビューが表示されているオブジェクトを返します。デフォルトで これはURLconfの中self.querysetpkまたはslug引数 が必要ですが、サブクラスは、任意のオブジェクトを返すためにこのメソッドをオーバーライドすることができます。

+0

私はこの作業を取得します。しかし、データを更新したかどうかに基づいてユーザーをリダイレクトする方法。私は、そのデータが更新され、リダイレクトURLを求めていることがわかります。 –

+0

どういう意味ですか?更新後にユーザーをリダイレクトしたい場合(または理解していない場合)はどこにリダイレクトしますか?それが長いものであれば、別の質問をして、あなたの問題に対するこの1つの答えを考えてみてください。 – Bestasttung

+0

新しい質問が投稿されましたhttps://stackoverflow.com/q/46193057/3719167 –

関連する問題