Reputation: 6190
I'm using Django 1.7 with Django Rest Framework. I've written an API that detects the login of a user 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 face an error with this view which shows the following traceback
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 entirely sure if this is an error in my code or Django's query.py. I'd appreciate help in figuring out the problem here
Upvotes: 14
Views: 34188
Reputation: 2388
In the django documentation
Says that:
Entry.objects.order_by('headline')[0]
Entry.objects.order_by('headline')[0:1].get()
Note, however, that the first of these will raise IndexError while the second will raise DoesNotExist if no objects match the given criteria. See get() for more details.
So if that is possible that your query will return no data at all. You might want to use Entry.objects.order_by('headline')[0:1].get()
instead of its shortcut [0]
Upvotes: -1