Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么选择instance.profile.save()_Python_Django - Fatal编程技术网

Python 为什么选择instance.profile.save()

Python 为什么选择instance.profile.save(),python,django,Python,Django,我理解这个代码有点困难 from django.db.models.signals import post_save from django.contrib.auth.models import User from django.dispatch import receiver from .models import Profile @receiver(post_save, sender=User) def create_profile(sender, instance, created,

我理解这个代码有点困难

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile


@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)


@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
    instance.profile.save()
既然post_save信号证明用户已经保存,并且已经创建了与该用户相关联的配置文件,为什么我们需要在这里执行instance.profile.save

请帮我理解它!谢谢

编辑:
在instance.profile.save is profile中,内置关键字

似乎是在创建用户时创建配置文件的第一个信号。第二个用于在一次调用中更新用户和配置文件,例如:

user.first_name = 'John'
user.last_name = 'Smith'
user.profile.age = 30
user.save()  # user and profile are updated in one call
所以你不必做:

user.profile.save()

老实说,第二个信号是为了避免编写一行代码而造成的过度杀伤力。