2016-09-08 2 views
0

J'ai une authentification sociale python configurée pour créer un utilisateur en utilisant Open ID steam. Et j'ai un modèle séparé, lecteur, qui est lié dans une relation un-à-un avec l'utilisateur qui stocke des champs supplémentaires, dont l'un est steamid de l'utilisateur.Python social auth ne peut pas créer un modèle qui se rapporte à l'utilisateur

J'ai étendu le pipeline pour inclure une fonction qui crée un joueur et enregistre le steamid dans l'un de ses champs.

Tout va bien quand c'est un utilisateur qui n'est pas déjà stocké dans la base de données. En d'autres termes, l'application crée l'utilisateur et enregistre le champ la première fois que je me connecte, mais la seconde fois que je me connecte renvoie cette erreur:

Impossible d'affecter "{Dictionary}": "User.player" doit être une instance "Player". Où Dictionary est l'ensemble des champs.

Voici ma fonction:

def save_profile(backend, user, response, *args, **kwargs): 
import pdb; pdb.set_trace() 
if backend.name == 'steam': 
    player = Player(user = user, 
     ingamename = kwargs['uid'], 
     avatar = kwargs['details']['player']['steamid']) 
    player.save() 
+0

Je devrais noter que l'ajout de ce point d'arrêt dans mon code, le programme ne l'appelle même pas la deuxième fois. Ce n'est que la première fois que je me connecte que le programme atteint réellement ce point d'arrêt. La deuxième fois il jette l'erreur sans même atteindre le point d'arrêt – dosedoe

Répondre

0

Résolu mon propre problème: Le problème était que mon modèle était la même que l'une des clés dans les arguments de mots clés, il a essayé à tort de sauver la ' dictionnaire du joueur dans mon champ de modèle. Changer «joueur» en «profil» a résolu le problème.