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