索引器,列表索引超出范围。Django allauth信号

索引器,列表索引超出范围。Django allauth信号,django,django-allauth,Django,Django Allauth,当社交用户在facebook.com上改变性别时,我用信号来更新性别。 信号工作正常。我可以注册和登录和性别是更新的fb用户 #app/models.py @接收者(用户已注册) @接收器(用户已登录) def set_性别(发送方,**kwargs): user=kwargs.pop('user') 额外数据=user.socialaccount\u set.filter(provider='facebook')[0]。额外数据 性别=额外的性别数据 如果性别=‘男性’: user.gende

当社交用户在facebook.com上改变性别时,我用信号来更新性别。 信号工作正常。我可以注册和登录和性别是更新的fb用户

#app/models.py
@接收者(用户已注册)
@接收器(用户已登录)
def set_性别(发送方,**kwargs):
user=kwargs.pop('user')
额外数据=user.socialaccount\u set.filter(provider='facebook')[0]。额外数据
性别=额外的性别数据
如果性别=‘男性’:
user.gender=u'M'
elif性别==“女性”:
user.gender=u'F'
user.save()
但我注意到,在正常情况下 我尝试在/accounts/signup处注册或在/accounts/login处登录我遇到以下错误:

Exception Type: IndexError
Exception Value: list index out of range
然而,普通用户成功地保存到数据库中,我只有在注册和登录后才出现此错误

我认为这是问题的根源:

extra\u data=user.socialaccount\u set.filter(provider='facebook')[0]。额外数据

你是对的,这是有问题的一行。您可能想要更像:

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