【发布时间】:2012-07-25 03:53:56
【问题描述】:
我在网络上看到另一个答案here 和其他地方建议在扩展内置 django 用户时使用 user.get_profile。在下面的示例中,我没有这样做。该功能似乎运行良好,但不使用 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))
【问题讨论】:
-
您可以删除视图的
user = User.objects.get(pk=request.user.id)行。request.user已经是用户模型实例。此外,locals()的名字也很可疑;它没有在视图中定义,所以它真的是本地的吗? -
@JCotton 使用
locals()是一个内置函数。在这里,它被用作避免手动定义模板上下文字典的技巧。这可以节省时间,但明确定义上下文可能是更好的做法。关于request.user的好点。 -
@Alasdair 嘿,谢谢!不知道
locals()
标签: python django view model profile