我正在询问如何在模型用户中添加信号并知道该用户是否通过 Facebook 进行了注册,我的意思是,如果是新的用户< / strong>在Django中使用 Facebook 创建我想要捕获此事件并保存新的Customer模型。 我相信这可能是那样的:
# SIGNALS AND LISTENERS
from django.contrib.auth.models import User
from django.db.models import signals
from django.dispatch import dispatcher
form customers.model import Customer
# User
def user_post_save(sender, instance, signal, *args, **kwargs):
# Creates user profile
if user # <- SOMETHGING LIKE IF USER IS LOGGED IN WITH FACEBOOK...
customer = Customer.objects.get_or_create(owner=instance)
dispatcher.connect(user_post_save, signal=signals.post_save, sender=User)
在评论中,您可以看到我需要的东西。 谢谢你的帮助。
答案 0 :(得分:1)
Django提供内置信号:pre_save,pre_init ...
使用它:
def password_change_signal(sender, instance, **kwargs):
try:
user = User.objects.get(username=instance.username)
if not hasattr(user, 'userprofile'):
print 'has no profile'
return
if not user.password == instance.password:
print 'setting vals'
profile = user.get_profile()
profile.force_password_change = False
profile.save()
except User.DoesNotExist:
pass
signals.pre_save.connect(password_change_signal, sender=User,dispatch_uid='members.models.UserProfile')
答案 1 :(得分:0)
根据此SO POST,您可以使用post_save.connect()
在创建用户时保存客户对象。请注意,我已根据您的要求在上述帖子中粘贴和编辑了代码。
from django.db.models.signals import post_save
from .models import Customer
from django.contrib.auth.models import User
def create_customer(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
customer = user.models.Customer()
customer.setUser(sender)
customer.save()
post_save.connect(create_customer, sender=User)