I have a Django code that must do some math, but I continuously get the following error:
unsupported operand type(s) for -: ‘str’ and ‘int’
Here is the code:
from django.shortcuts import render
from django.http import HttpRequest
def index(request):
nor = request.GET.get('nor')
mc = request.GET.get('mc')
repaired = request.GET.get('repaired')
if isinstance(nor, int):
if repaired == 'yes':
if mc == 'yes':
summary = nor*20000+30000
else:
summary = nor*20000
else:
if mc == 'yes':
summary = nor*20000-20000
else:
summary = nor*20000-50000
else:
summary = 'Try again'
return render(request, 'index.html', {'summary':summary})
Here is also the URL where I want to get “nor” from:
http://localhost:8000/mechanical/?nor=4&mc=yes&repaired=no&submit=Submit
Advertisement
Answer
Query string params are always string, you need to convert them to desired type. Here you need to convert string to int.
def index(request):
nor = request.GET.get('nor')
mc = request.GET.get('mc')
if nor: # check if parameter exist.
nor = int(nor)
repaired = request.GET.get('repaired')
if isinstance(nor, int):
if repaired == 'yes':
if mc == 'yes':
summary = nor*20000+30000
else:
summary = nor*20000
else:
if mc == 'yes':
summary = nor*20000-20000
else:
summary = nor*20000-50000
else:
summary = 'Try again'
return render(request, 'index.html', {'summary':summary})
You can try-catch block around your type conversion to handle other exceptions.