一些背景知识,我一直在为我们的 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
模型.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() (因为它当前在注释掉的行中输入)时,我收到以下错误无法将关键字“用户”解析到字段中。选项有:生日、性别、id、userLink
我还使用定义为“用户”的 userLink 使用新数据库尝试了这种方法,以匹配 django.docs 网站指定的内容,但仍然收到有关帐户不存在的错误。我尝试从 https://bitbucket.org/filmaster/filmaster-test/src/1618b18003ed/film20/userprofile/views.py创建一个 try: and except: 方法 来处理这个错误,但这也没有产生任何积极的结果。
我不知道如何让 .get_profile() 工作,并且想不出任何东西可以让我访问用户存储的信息,以便他们可以以表格形式对其进行编辑。我不确定我是否了解此时如何正确使用它,并且觉得我此时只是在转圈。如果有人可以帮助我,我将不胜感激。我试图提供尽可能多的相关信息,但如果您需要其他信息来帮助我,请告诉我,我会尽快提供。
提前致谢!