IndexError,列表索引超出范围。 Django-allauth 信号
IndexError, list index out of range. Django-allauth signals
当社交用户在 facebook.com 上更改性别时,我正在使用信号来更新性别。
信号工作正常。我可以注册并登录,性别正在为 fb 用户更新。
#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 登录 我收到此错误:
Exception Type: IndexError
Exception Value: list index out of range
但是普通用户保存到数据库成功了,我是注册登录后才出现这个错误
我认为这是导致问题的原因:
extra_data = user.socialaccount_set.filter(provider='facebook')[0].extra_data
你是对的,那是有问题的行。你可能想要更像的东西:
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()
当社交用户在 facebook.com 上更改性别时,我正在使用信号来更新性别。 信号工作正常。我可以注册并登录,性别正在为 fb 用户更新。
#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 登录 我收到此错误:
Exception Type: IndexError
Exception Value: list index out of range
但是普通用户保存到数据库成功了,我是注册登录后才出现这个错误
我认为这是导致问题的原因:
extra_data = user.socialaccount_set.filter(provider='facebook')[0].extra_data
你是对的,那是有问题的行。你可能想要更像的东西:
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()