2012-05-15 79 views
3

一些背景, 我已經設計了我們的Django的數據庫系統中的用戶配置文件和我目前正在努力創建一個視圖頁面,允許用戶編輯他們的賬戶(外的管理頁面)。我搜索了很多來源,其中大多數推薦使用.get_profile(),但是無論我嘗試什麼方法(根據我的知識和所做的研究),這在我的程序中都不起作用。到目前爲止,我已經用了.get_profile Django的主網頁(),看看如何正確使用.get_profile(),發現AUTH_PROFILE_MODULE設置(我會指定我在一個位設置)。
使用本網站: http://www.turnkeylinux.org/blog/django-profile我發現使用.get_profile(),但仍然沒有奏效的一些其他方法。 (我不會增加我已經試過鏈接的其餘部分我可以繼續下去了一會兒)的Django 1.4創建編輯用戶配置文件帳戶設置查看

回到問題,任何人都可以建議,將工作,這樣我可以獲取用戶信息的方法設置一些默認值以保持其當前設置,如果他們選擇不編輯它們,只更新新提交的值。

到目前爲止,我有:(希望所有的相關部分)

文件目錄: 〜/文檔/ PROJECT1

settings.py

AUTH_PROFILE_MODULE = "accounts.Account" 

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

文件位置: PROJECT1 /賬戶

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 

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

views.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()(因爲它是在註釋掉線目前鍵入)我有以下錯誤 無法解析關鍵詞「用戶」到現場。選擇是:出生日期,性別,身份證,用戶鏈接

我也嘗試過使用userLink定義爲「用戶」的新數據庫,而不是匹配django.docs網站指定的內容,但仍然收到關於帳戶不存在的錯誤。我試圖創建一個嘗試:除了:從 https://bitbucket.org/filmaster/filmaster-test/src/1618b18003ed/film20/userprofile/views.py 處理此錯誤的方法,但這也沒有產生任何積極的結果。

我不知道如何讓get_profile()工作,也想不出任何讓我訪問用戶存儲的信息,以便它們可以在窗體中被編輯。我不確定在這一點上我是否明白如何正確使用它,並覺得我現在只是在圈子裏跑來跑去。如果有人能幫助我,我會很感激。我試圖儘可能多地提供相關信息,但如果您需要其他幫助我的信息,請告訴我,我會盡快將其納入考慮範圍。

在此先感謝!

回答

6

要獲得附加到用戶對象的配置文件,您只需要調用get_profile()用戶對象上:

user.get_profile() 

例如,

request.user.get_profile() 

的文檔就可以在Django Docs。值得注意的是,

get_profile()方法不創建配置文件(如果不存在)。

所以,你必須有一個觸發創建創建用戶配置文件...

+0

非常感謝。我嘗試了一個答案,但我仍然太新了,但我很欣賞這個幫助。現在得到它的工作:-D – NightCodeGT

+0

我搞砸了一件事是命名我的帳戶用戶名鏈接到auth帳戶。我將它命名爲「userLink」,而不是「用戶」,在Django Docs中提到用戶鏈接必須命名爲「user」才能使用。只要提到這一點,以防其他人在這裏尋找類似問題的解決方案。 – NightCodeGT

0

user.get_profile()現在貶值,相反,假設你有一個OneToOne與用戶模型,你可以使用user.profile

相關問題