我想向用户显示一些统计信息(例如,自上次登录后已售出多少件物品)
@receiver(user_logged_in)
def notify_user_on_login(sender, request, user, **kwargs):
items = Item.objects.filter(status=Item.HISTORY_STATUS, seller=user, when_trading__gte=user.last_login)
但是,此信号last_login
已经更新。
根据{{1}}的消息来源,django还将信号与更新django.contib.auth
的函数连接起来:
last_login
是否可以在更新前调用我的功能?或者在不添加自定义字段或做一些奇怪的魔法的情况下得到相同的结果?
答案 0 :(得分:2)
last_login
也会更新handler到该信号,这肯定会在您的信号之前注册并执行。您可以通过django.contrib.auth
中的INSTALLED_APPS
移动应用来解决您的问题。
依赖于顺序的信号处理程序虽然看起来不是一个好主意。所以我可能会用你自己的代码取代Django的处理程序:
from django.contrib.auth.models import update_last_login
def notify_user_on_login(user):
items = Item.objects.filter(status=Item.HISTORY_STATUS, seller=user, when_trading__gte=user.last_login)
@receiver(user_logged_in)
def after_user_logged_in(sender, user, **kwargs):
notify_user_on_login(user)
update_last_login(sender, user, **kwargs)
user_logged_in.disconnect(update_last_login)