【问题标题】:Django signal simple snippet confusion?Django 信号简单片段混淆?
【发布时间】:2018-01-06 02:39:36
【问题描述】:

这是我在互联网上找到的一个简单的 Django 信号 sn-p,用于在创建用户后生成配置文件。第二个 post_save 信号需要什么。第一个“创建”不是已经保存了配置文件吗?那么为什么要创建第二个接收器呢?

@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()

【问题讨论】:

  • 每当User 实例更新/保存时,第二个信号都会保存Profile 实例中的当前更改。
  • 首先它就像auto_now_add=True,其次它就像auto_now=True

标签: python django django-models


【解决方案1】:

post_save 信号的created 参数表示该实例之前是否保存过(即它是否是新创建的)。第一个处理程序创建一个新的Profile 实例,用于新创建的User,而第二个处理程序则在保存User 时保存已经实例化的Profile 实例。

话虽如此,这两个处理程序可以合并为一个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 2014-12-06
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2016-11-16
    • 2013-06-01
    • 1970-01-01
    相关资源
    最近更新 更多