2016-05-13 23 views
0

Wen ich fragen, wie ein Signal in Modell Benutzer und wissen, hinzuzufügen, wenn der Benutzer durch Facebook registriert war, ich meine, wenn ein neuer Benutzer in Django erstellt mit Facebook Ich möchte dieses Ereignis abfangen und ein neues Kundenmodell speichern. Ich glaube, dass so etwas wie das sein könnte:Django Signal Benutzer wenn ist registriert mit Facebook

# 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) 

Im Kommentar können Sie sehen, was ich brauche. Danke für Ihre Hilfe.

Antwort

1

Django bietet der Einbau-Signale: pre_save, pre_init ...

Verwendung dieses wie:

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') 

0

Nach dieser SO POST, Sie post_save.connect() verwenden können Kundenobjekt speichern Wann immer ein Benutzer erstellt wird. Bitte beachten Sie, dass ich den Code im oben genannten Beitrag entsprechend Ihren Anforderungen eingefügt und bearbeitet habe.

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)