gpt4 book ai didi

python - 我什么时候应该在 Django 中使用 user.get_profile?

转载 作者:太空狗 更新时间:2023-10-30 01:23:36 24 4
gpt4 key购买 nike

我看到另一个答案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))

最佳答案

代码按照您编写的方式工作,但是因为您没有将实例传递给模型,所以它有点不寻常,因此其他 Django 开发人员可能需要更长的时间才能弄清楚发生了什么。

您链接到的 View 使用实例实例化模型表单,以便现有的配置文件值显示在表单中。在您的情况下,您将得到空字段。

upform = UserProfileForm(instance=user.get_profile())

因为您没有提供实例,所以保存会尝试创建一个新的 user_profile,这是我们不想要的。在您的情况下不会发生这种情况,因为您已将 user 设为主键,但这也有点不寻常。

编写 user.get_profile() 的主要优点是您不需要知道用户配置文件使用哪个模型。如果您乐于在代码中对 UserProfile 模型进行硬编码,则可以使用 instance=UserProfile.objects.get(user=user) 代替。

关于python - 我什么时候应该在 Django 中使用 user.get_profile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com