sha*_*aka 5 python django profile model view
我在这里看到了另一个答案 以及网络上推荐在扩展内置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')
Run Code Online (Sandbox Code Playgroud)
@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))
Run Code Online (Sandbox Code Playgroud)
该代码按照您编写的方式工作,但由于您没有将实例传递给模型,因此有点不寻常,因此另一个 Django 开发人员可能需要更长的时间才能弄清楚发生了什么。
您链接到的视图使用实例实例化模型表单,以便现有配置文件值显示在表单中。在你的情况下,你会得到空字段。
upform = UserProfileForm(instance=user.get_profile())
Run Code Online (Sandbox Code Playgroud)
因为您没有提供实例,所以保存时会尝试创建一个新的实例user_profile,这是我们不希望的。在你的情况下不会发生这种情况,因为你已经创建了user主键,但这也有点不寻常。
编写的主要优点user.get_profile()是您不需要知道用户配置文件使用哪种模型。如果您愿意UserProfile在代码中硬编码模型,则可以instance=UserProfile.objects.get(user=user)改为放置。
| 归档时间: |
|
| 查看次数: |
2943 次 |
| 最近记录: |