首页 > 解决方案 > 在 post_save 信号上获取完整的用户对象

问题描述

我是信号新手。我想做的事情可以务实地在视图上完成,也许信号不是要走的路,但无论如何,我对信号有问题。我有一个用户模型(自定义)和 UserIdentities 模型。创建新用户时,将生成 3 个身份并保存在 UserIdentities 模型中:

     User(models.Model):
      fields...

     UserIdentities(models.Model):
       user = models.ForeignKey(User)

    @receiver(post_save, sender = User)
    def user_created(sender, instance, created, raw, **kwargs):
         if created:
             # generate three dept identities and save in UserIdentities model
             identities = generate_identiteies(instance)

我现在遇到的问题是该实例是用户名(单个字符串),而不是具有用户所有属性的 User 对象的实例。在文档中,它说实例是创建的对象,但在这里我只获得创建的用户的用户名,但需要几个其他字段来生成身份

标签: django

解决方案


我现在遇到的问题是该实例是用户名......我只得到创建的用户的用户名......

这不应该是这样。instancein case ofpost_savesaved的实际实例。

assertIsInstance(instance, User.class)您可以通过在信号方法中添加beforeif created语句来验证这一点。如果你没有得到AssertionError,你可以放心地假设它instance不是一个字符串。


推荐阅读