我看到了另一個回答here和網絡上的其他地方,推薦使用user.get_profile擴展內置的django用戶。我在下面的例子中沒有這樣做。該功能似乎工作正常,但沒有使用user.get_profile()有一個缺點?什麼時候應該在django中使用user.get_profile?
模型
class UserProfile(models.Model):
user = models.ForeignKey(User, primary_key=True)
quote = models.CharField('Favorite quote', max_length = 200, null=True, blank=True)
website = models.URLField('Personal website/blog', null=True, blank=True)
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
fields = ('quote', 'website')
視圖
@login_required
def user_profile(request):
user = User.objects.get(pk=request.user.id)
if request.method == 'POST':
upform = UserProfileForm(request.POST)
if upform.is_valid():
up = upform.save(commit=False)
up.user = request.user
up.save()
return HttpResponseRedirect('/accounts/profile')
else:
upform = UserProfileForm()
return render_to_response('reserve/templates/edit_profile.html', locals(), context_instance=RequestContext(request))
您可以刪除View的'user = User.objects.get(pk = request.user.id)'行。 'request.user'已經是用戶模型實例。另外,'locals()'是可疑的命名;它沒有在視圖中定義,所以它真的是本地的? – JCotton 2012-07-26 17:39:18
@JCotton使用['locals()'](http://docs.python.org/library/functions.html#locals)是一個內置函數。在這裏它被用作hack來避免必須手動定義模板上下文字典。這是一個節省時間的方法,但是明確定義上下文可能更好。關於'request.user'的好處。 – Alasdair 2012-07-26 21:13:56
@Alasdair嘿謝謝!不知道關於'locals()' – JCotton 2012-07-26 21:53:55