如何将kwargs从save传递到post_save信号

Tor*_*ups 27 python django

我正在连接一个自定义的post_save信号,并注意到我似乎无法找到一个简单的方法来传递一组kwargs.

在保存期间(在自定义表单内)

def save(self, commit=True):
    user = super(CustomFormThing, self).save(commit=False)
    #set some other attrs on user here ...
    if commit:
        user.save()

    return user
Run Code Online (Sandbox Code Playgroud)

然后在我的自定义post_save钩子里面我有以下(但从来没有得到任何kwargs)

@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    some_id = kwargs.get('some', None)
    other_id = kwargs.get('other', None)

    if created:
        #do something with the kwargs above...
Run Code Online (Sandbox Code Playgroud)

我如何将kwargs从save保存到post_save事件?

DrT*_*rsa 37

内置信号由Django发送,因此您无法控制他们的kwargs.

您可以:

  1. 定义并发送您自己的信号.
  2. 在模型实例中存储其他信息.像这样

    def save(self, commit=True):
        user = super(CustomFormThing, self).save(commit=False)
        #set some other attrs on user here ...
        user._some = 'some'
        user._other = 'other'
        if commit:
            user.save()
    
        return user
    
    @receiver(post_save, sender=User)
    def create_profile(sender, instance, created, **kwargs):
        some_id = getattr(instance, '_some', None)
        other_id = getattr(instance, '_other', None)
    
        if created:
            #do something with the kwargs above...
    
    Run Code Online (Sandbox Code Playgroud)