3

いくつかの背景として、私は Django データベース システムのユーザー プロファイルを設計しており、現在、ユーザーが自分のアカウント設定を編集できるようにするビュー ページを作成しようとしています (管理ページの外部)。私は多数の情報源を検索しましたが、そのほとんどは .get_profile() の使用を推奨していますが、これは私のプログラムではどのようなアプローチを試みても機能しませんでした (私の知る限り、調査を行った結果)。これまでのところ、.get_profile() の django メイン ページを使用して .get_profile() を適切に使用する方法を確認し、AUTH_PROFILE_MODULE 設定を見つけました (設定については後で説明します)。
このサイトを使用: http://www.turnkeylinux.org/blog/django-profile .get_profile() を使用する他の方法をいくつか見つけましたが、まだ何も機能していません。(残りのリンクは追加しません。

質問に戻ると、ユーザー情報を取得して現在の設定を維持するためのデフォルト値を設定できる方法を誰かが推奨できますか?

これまでのところ、私は持っています:(うまくいけば、関連するすべての部分)

ファイルディレクトリ: ~/Documents/project1

設定.py

AUTH_PROFILE_MODULE = "accounts.Account"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

ファイルの場所: project1/accounts

models.py

# additional model to incorporate our custom fields to the auth user model                                                                                   
class Account(models.Model):
    userLink = models.OneToOneField(User)      #link (pointer) to the users other     information in User model                                                  
    birthdate = models.DateField(blank = True) # True makes this field optional                                                                              
    gender = models.CharField(max_length = 1, choices = GENDER_CHOICE, null = True)

    def __unicode__(self):            # define a unicode for the user to access                                                                              
        return u'%s %s' % (self.userLink.first_name, self.userLink.last_name)   # return first and last name

# custom Form to change user account information (can't be a modelForm)                                                                                      
class EditAccountForm(forms.Form):
    gender = forms.CharField(max_length = 1)#, choices = GENDER_CHOICE, null = True)                                                                         
    birthdate = forms.DateField(widget = SelectDateWidget()) # True makes this field   optional

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ビュー.py

# Account settings view                                                                                                                                      
@login_required
def AccountSettings(request):
    sluggedSettingError = request.GET.get('error', '') # error message with slugged character                                                                
    settingError = sluggedSettingError.replace('-', ' ')
    settingForm = AdditionalForm(request.POST or None) # variable is called in     edit_user.html                                                                
    # might want to have some way to create a new profile if the account doesn't exist                                                                       
    userSettings = Account.objects.filter(userLink=request.user)
#    userSettings = request.user.get_profile() # returns the current settings of the     users profile                                                           
#### Currently trying to get it to let me use get_profile() ########                                                                                         
    print "userLink = %s" % userSettings#.user                                                                                                               
#    print "Gender = %s" % userSettings.gender # testing print                                                                                               
    if request.method == 'POST':
#        if settingForm.is_valid():                                                                                                                          
#            settingForm.save();                                                                                                                             
        return HttpResponseRedirect('/')
    return render_to_response("user_settings.html", {'settingForm': settingForm,   'settingError': settingError}, context_instance = RequestContext(request))
#        gender = request.POST['gender']  # pass in the gender variable from post                                                                            
#        birthdate = request.POST['birthdate']   # pass in the birthdate from post        

コードは現在 .get_profile() アプローチをあきらめ、一致する userLink が見つかるまで利用可能なアカウントを介してクエリを実行し、それを変数「userSettings」に保存しようとしました。私が取っていたアプローチは、この変数をuserSettings.gender、userSettings.birthdateなどとして使用して、各ユーザー設定にアクセスし、更新された場合は変更し、そうでない場合は以前の値に設定することでした(一連のifステートメントまたはいくつかのDjango 関数に組み込まれています)。

これが最も効率的な方法なのか、それとも get_profile() メソッドに戻すべきなのかはわかりません。get_profile() を使用していたとき (コメント アウトされた行に現在入力されているため)、次のエラーが発生しました。キーワード 'user' をフィールドに解決できません。選択肢は次のとおりです: 生年月日、性別、ID、userLink

また、代わりに「user」として定義されたuserLinkを使用して新しいデータベースでこのアプローチを試み、django.docs Webサイトが指定したものと一致させましたが、まだアカウントが存在しないというエラーが発生しました。このエラーを処理するためにhttps://bitbucket.org/filmmaster/filmmaster-test/src/1618b18003ed/film20/userprofile/views.pyからtry: and except: アプローチを作成しようとしました が、これも肯定的な結果は得られませんでした。

.get_profile() を機能させる方法についてのアイデアがありません。ユーザーが保存した情報にアクセスして、ユーザーがフォームで編集できるようにする方法は考えられません。この時点では、それを適切に使用する方法を理解しているかどうかわからず、この時点でただぐるぐる回っているように感じます. 誰かがこれで私を助けることができれば、私はそれを感謝します. できるだけ多くの関連情報を提供しようとしましたが、他に何か助けが必要な場合はお知らせください。できるだけ早く含めるようにします.

前もって感謝します!

4

2 に答える 2

6

ユーザー オブジェクトに添付されたプロファイルを取得するには、ユーザー オブジェクトを呼び出すだけですget_profile()

user.get_profile()

例えば、

request.user.get_profile()

そのドキュメントはDjango Docsにあります。注目に値するのは

メソッド get_profile() は、プロファイルが存在しない場合、プロファイルを作成しません。

したがって、ユーザーの作成時にプロファイルを作成するトリガーが必要です...

于 2012-05-15T22:12:27.573 に答える