我以前做过这件事并且工作得很好。这是因为我正在使用django2.0
吗?
models.朋友
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
....
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
我得到错误AttributeError: 'User' object has no attribute 'profile'
。我不明白吗?
要访问ForeignKey
配置文件所有相关的反向信息,您需要使用profile_set
。如果您需要获取并保存第一个相关对象,请尝试以下方法:
def save_user_profile(sender, instance, **kwargs):
instance.profile_set.first().save()
但在这种情况下,我相信你最好使用OneToOneField
:
user = models.OneToOneField(User, on_delete=models.CASCADE)
它允许只创建一个相关的配置文件,并允许这种语法:
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()