Index error: index index out of range in Django

I am using Django 1.7 with the Django Rest Framework. I wrote an API that defines the user's login as follows:

def login_check(request):
    user = request.user
    if user.is_anonymous():
        return HttpResponse(json.dumps({
            'success': False
        }))
    else:
        try:
            user_obj = UserProfile.objects.get(user__pk=user.id)
        except UserProfile.DoesNotExist:
            main_obj = User.objects.get(pk=user.id)
            user_obj = UserProfile(user=main_obj)
            user_obj.save()
        fb_uid = SocialAccount.objects.filter(user_id=user.id, provider='facebook')
        print fb_uid[0].uid
        user_obj.profile_photo_url = "http://graph.facebook.com/{}/picture?width=300&height=300".format(fb_uid[0].uid)
        user_obj.save()
        serialized = UserProfileSerializer(user_obj)
        return Response(serialized.data, status=status.HTTP_200_OK)

I am encountering an error in this view that shows the following trace

IndexError at /loginCheck/
list index out of range
Request Method: GET
Request URL:    http://localhost:8000/loginCheck/
Django Version: 1.7.4
Exception Type: IndexError
Exception Value:    
list index out of range
Exception Location: f:\App\venv\lib\site-packages\django\db\models\query.py in __getitem__, line 178
Python Executable:  f:\App\venv\Scripts\python.exe
Python Version: 2.7.6
Python Path:    
['f:\\App',
 'f:\\App\\venv\\lib\\site-packages\\psycopg2-2.6-py2.7-win32.egg',
 'C:\\WINDOWS\\SYSTEM32\\python27.zip',
 'f:\\App\\venv\\DLLs',
 'f:\\App\\venv\\lib',
 'f:\\App\\venv\\lib\\plat-win',
 'f:\\App\\venv\\lib\\lib-tk',
 'f:\\App\\venv\\Scripts',
 'c:\\Python27\\Lib',
 'c:\\Python27\\DLLs',
 'c:\\Python27\\Lib\\lib-tk',
 'f:\\App\\venv',
 'f:\\App\\venv\\lib\\site-packages']

I'm not quite sure if this is a bug in my code or Django query.py. I would appreciate help in figuring out the problem here.

+4
source share
1 answer

Try using first()instead of [0]indexing the query:

so_account = SocialAccount.objects.filter(user_id=user.id,
                                          provider='facebook').first()
if so_account:
    fb_uid = so_account.uid
    ...
+9
source

All Articles