为了账号安全,请及时绑定邮箱和手机立即绑定

当配置文件已经创建并保存时,为什么我们必须保存配置文件的实例?

当配置文件已经创建并保存时,为什么我们必须保存配置文件的实例?

杨魅力 2022-01-11 17:10:41
我正在学习 Django 中的教程,但在理解下面的代码时遇到了一些问题:@receiver(post_save, sender=User)def create_profile(sender, instance, created, **kwargs):    if created:        Profile.objects.create(user=instance)# why do we need to save instance? 'Profile.objects.create' already created and save that for us@receiver(post_save, sender=User)def save_profile(sender, instance, **kwargs):    instance.profile.save()这意味着如果用户创建帐户或注册网站,使用信号将自动创建与该用户关联的配置文件。问题是为什么我们需要保存配置文件的实例,因为Profile.objects.create(user=instance)已经同时创建并保存了该实例。即使我省略了上面代码的第二块,它仍然可以正常工作:@receiver(post_save, sender=User)def create_profile(sender, instance, created, **kwargs):    if created:        Profile.objects.create(user=instance)我在这里遗漏了什么,或者我不明白,还是我们不需要第二个块?请帮助我理解这一点,并在此先感谢您。
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

您应该与该教程的作者一起讨论。


这背后的原因不是为了创建,而是为了更新。例如,您可以这样做来更新现有用户及其个人资料:


user = request.user

user.last_name = 'Smith'

user.profile.info_field = 'Some details'

user.save()

在那里,您已经调用save了用户,但没有第二个信号,您还没有保存链接的配置文件。该信号旨在确保当您调用时user.save(),配置文件也会自动保存。


但这不是我喜欢的模式,也不推荐。如果您正在更改一个对象,您有责任保存它 - 在上面的代码中,您应该调用user.profile.save()而不是依赖信号。


查看完整回答
反对 回复 2022-01-11
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信