django 中自定义用户注册的信号

kam*_*aou 4 python django signals django-custom-user

请帮助 !!

我有一个在项目中使用的自定义用户模型。当新用户注册时,我通过使用信号为他们创建一个钱包。

@receiver(post_save, sender=User)
def create_saving_wallet(sender, instance, **kwargs):
    [...]
Run Code Online (Sandbox Code Playgroud)

在函数中,我正在做一些基本的事情,比如

wallet = Wallet(user_id=user_id, wallet_type=wallet_type, amout=amount)
wallet.save()
Run Code Online (Sandbox Code Playgroud)

而且,我在app.py这个类中发送信号:

from django.apps import AppConfig
from django.core.signals import request_finished


class MyAppConfig(AppConfig):

    def ready(self):
        from wallet import views
        # Explicitly connect a signal handler.
        request_finished.connect(views.create_saving_wallet, dispatch_uid="azerty123")
Run Code Online (Sandbox Code Playgroud)

当我们使用注册表时,一切正常,但如果我们使用管理站点登录,则会调用信号,然后更新旧钱包。

我该怎么做才能避免这种行为?

当调用我的自定义用户的save()方法时,应该只调用该信号。我不确定,但由于我有这个错误,这是否意味着当用户登录时,会调用 save() 方法?

Thi*_*Sow 5

尝试一下,注意在 post_save 中有一个created有用的参数created has two values(True and False).True is when the User is first created

@receiver(post_save, sender=User)
def create_saving_wallet(sender,instance,created,*args,**kwargs):
    if created:
       # add your code here
Run Code Online (Sandbox Code Playgroud)

  • 是的,你的回答很有帮助。我不知道这个参数的存在,但它解决了我的问题。谢谢你阿呆。 (2认同)