IndexError,列表索引超出范围。 Django-allauth信号 [英] IndexError, list index out of range. Django-allauth signals
问题描述
当社交用户在facebook.com上更改性别时,我正在使用信号来更新性别。
信号正常。我可以注册并登录,并且fb用户的性别正在更新。
I'm using signals to update gender, when social user change their gender on facebook.com. Signals work fine. I can sign up and login and gender is updating for fb users.
#app/models.py
@receiver(user_signed_up)
@receiver(user_logged_in)
def set_gender(sender, **kwargs):
user = kwargs.pop('user')
extra_data = user.socialaccount_set.filter(provider='facebook')[0].extra_data
gender = extra_data['gender']
if gender == 'male':
user.gender = u'M'
elif gender == 'female':
user.gender = u'F'
user.save()
但是我注意到,对于普通帐户,当
我尝试在 / accounts / signup 进行注册或在进行登录/ accounts / login 我收到此错误:
But I've noticed that for normal accounts when I try to sign up at /accounts/signup or sign in at /accounts/login I got this error:
Exception Type: IndexError
Exception Value: list index out of range
但是,正常用户成功保存到数据库后,注册和登录后仅出现此错误。
However normal users are succesfully saved to database, I only have this error after registration and login.
我认为这会引起问题:
extra_data = user.socialaccount_set.filter(provider='facebook')[0].extra_data
推荐答案
您是正确的,那是有问题的行。您可能想要更多类似的东西:
You are correct, that is the problematic line. You probably want something more like:
from django.db.models import ObjectDoesNotExist
@receiver(user_signed_up)
@receiver(user_logged_in)
def set_gender(sender, **kwargs):
user = kwargs.pop('user')
try:
extra_data = user.socialaccount_set.get(provider="facebook").extra_data
except ObjectDoesNotExist:
pass
else:
gender = extra_data['gender']
if gender == 'male':
user.gender = 'M'
elif gender == 'female':
user.gender = 'F'
user.save()
这篇关于IndexError,列表索引超出范围。 Django-allauth信号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!